如何在线运行我的Powershell脚本?

时间:2019-04-02 02:07:01

标签: powershell syntax command-line-interface

我想执行内联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);

我希望内联获得相同的结果,但是我遇到了这个问题

1 个答案:

答案 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进程,请使用脚本块语法(powershell.exe)传递命令,在这种情况下,无需转义:

{ ... }