PowerShell指定不存在脚本时-nologo参数失效问题咨询
问题描述
从CMD执行PowerShell命令时,若指定的脚本文件存在,能通过-nologo参数正常屏蔽PowerShell版权信息:
C:\> powershell -exec bypass -nologo -noprofile -file .\myscript.ps1 <script output>
但如果指定的脚本不存在,执行命令后除了错误提示,仍会显示PowerShell版权信息:
C:\> powershell -exec bypass -nologo -noprofile -file .\invalid.ps1 The argument '.\invalid.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter. Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
环境信息:
PSVersion 5.1.19041.3031 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.19041.3031 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
请问是否遗漏了参数设置?如何实现仅获取错误信息,不显示版权logo?
解决方案
方法1:改用-Command参数替代-File
通过-Command参数先检查文件是否存在,再执行脚本或输出错误,能严格遵守-nologo的屏蔽规则:
C:\> powershell -exec bypass -nologo -noprofile -command "if(Test-Path '.\invalid.ps1'){& '.\invalid.ps1'} else {Write-Error 'The argument ''invalid.ps1'' to the -File parameter does not exist. Provide the path to an existing ''ps1'' file as an argument to the -File parameter.'}"
方法2:在CMD层面提前检查文件存在性
直接利用CMD的if exist命令先判断文件是否存在,再决定是否调用PowerShell:
C:\> if exist ".\invalid.ps1" (powershell -exec bypass -nologo -noprofile -file ".\invalid.ps1") else (echo The argument '.\invalid.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.)
原因说明
在Windows PowerShell 5.1中,使用-File参数指定不存在的脚本时,错误提示是在PowerShell核心初始化流程中抛出的,此时-nologo参数的屏蔽逻辑还未完全生效,导致后续仍会输出版权信息。而-Command参数会触发不同的初始化路径,能严格应用-nologo设置;CMD层面的检查则完全避免了PowerShell初始化时的版权信息输出。
内容的提问来源于stack exchange,提问作者Peyre
相关产品推荐
相关产品推荐

