我想执行内联Powershell,但是当我尝试执行所有内容时。我有Out-Null : A positional parameter cannot be found that accepts argument 'do'.
$OutputString = 'Hello World'
$WScript = New-Object -ComObject 'wscript.shell'
$WScript.Run('notepad.exe') | Out-Null
do {
Start-Sleep -Milliseconds 100
}
until ($WScript.AppActivate('notepad'))
$WScript.SendKeys($OutputString)
嵌入式Powershell
powershell -Command $OutputString = 'Hello World';$WScript = New-Object -ComObject 'wscript.shell';$WScript.Run('notepad.exe') | Out-Null ;do{ Start-Sleep -Milliseconds 100};until($WScript.AppActivate('notepad'));$WScript.SendKeys($OutputString);
我希望内联获得相同的结果,但是我遇到了这个问题
答案 0 :(得分:0)
您的代码有3个问题:
[profile otherprofile]
mfa_serial=arn:aws:iam::xxx:mfa/myid
aws_access_key_id=xxx
aws_secret_access_key=xxx
[profile myprofile]
source_profile=otherprofile
region=ap-southeast-2
role_arn=arn:aws:iam::xxx:role/owner
mfa_serial=arn:aws:iam::xxx:mfa/myid
语句之前缺少;
(在PowerShell中,必须将do
分隔在一行上的多个语句中)
;
后缺少until
关键字
do { ... }
,它破坏了;
语句。对do
的使用是未转义的,这意味着|
本身会对其进行解释,而不是按预期的PowerShell(我假设您是从cmd.exe
进行调用的,否则无需通过cmd.exe
调用PowerShell的CLI。
powershell.exe
必须以|
的形式转义,以使^|
传递到PowerShell。解决这些问题后,会从cmd.exe
中产生以下命令供使用:
cmd.exe
如果您确实想从PowerShell中运行代码 ,则可以直接 调用它,如问题的第一个代码片段所示-无需创建通过# From cmd.exe / a batch file:
powershell -Command $OutputString = 'Hello World'; $WScript = New-Object -ComObject 'wscript.shell'; $WScript.Run('notepad.exe') ^| Out-Null; do{ Start-Sleep -Milliseconds 100} until ($WScript.AppActivate('notepad')); $WScript.SendKeys($OutputString)
如果由于某种原因确实需要创建另一个PowerShell进程,请使用脚本块语法(powershell.exe
)传递命令,在这种情况下,无需转义:
{ ... }