基本上,我有一个代码在单独时可以工作,但是当我将它们组合起来时,我收到语法错误。我知道这两个部分单独工作但不能一起工作。下面两部分是
Start-process Powershell -verb runas
和
$Computername = Read-Host "Please put in Computer Name or IP Address" -AsString
reg add "\\$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Pause
当我将它们组合起来时,出现错误
请输入计算机名称或 IP 地址 -AsString: 1.1.1.1
错误:语法无效。
输入“REG ADD /?”供使用。
我知道
Start-process Powershell -verb runas
是正确的,因为它会在管理模式下打开 PowerShell 并要求我输入。
我知道其余的代码可以工作,因为如果我只使用下面的代码,它就会按预期工作
$Computername = Read-Host "Please put in Computer Name or IP Address" -AsString
reg add "\\$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Pause
请让我知道我做错了什么,完整的代码如下。
Start-process Powershell -verb runas {$Computername = Read-Host "Please put in Computer Name or IP Address" -AsString
reg add "\\$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Pause}
我尝试过取下
-AsString
。我仍然有同样的错误。我改变了相当多的语法,但无法摆脱错误。
Read-Host
没有有-AsString
开关吗?
它确实有一个
-AsSecureString
开关,要求返回 System.Security.SecureString
实例,但这不是您想要的。
如果没有此开关,则总是返回一个字符串。
任何
Read-Host
无法识别为引用其声明参数之一的 named 参数的参数都会隐式成为 -Prompt
参数值的一部分,即 提示字符串 的一部分,因此 -AsString
只是成为呈现给用户的提示字符串的(不需要的)部分。因此,只需省略它。
Start-Process
启动一个外部程序(子进程)。
其 positional 参数是
-FilePath
和 -ArgumentList
,因此这就是 Powershell
和 {$Computername = Read-Host ... }
分别绑定的内容。
-ArgumentList
(-Args
) 参数接受strings ([string[]]
) 数组,因为它只能传递给外部程序string 参数。
{ ... }
意味着本身不支持:如果您使用一个,其逐字内容(不包括{
和}
)将作为单个字符串传递。powershell.exe
) 默认将任何未知 CLI 参数的位置参数解释为传递给 -Command
(-c
) 参数,即形成要执行的 PowerShell 源代码.
"
命令行上的未转义的字符被假定为在命令行上具有纯粹的语法功能,因此在 PowerShell 的命令行解析过程中被剥离。
任何要
通过传递到
"
的-Command
字符,即那些应该形成要执行的PowerShell源代码的一部分的字符必须被转义为as\"
。
因此:
# Note how the embedded " chars. are escaped as \"
Start-Process -Verb RunAs powershell '
$Computername = Read-Host \"Please specify a Computer Name or IP Address\"
reg add \"\\$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint\" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
pause
'