繁体   English   中英

Powershell脚本似乎可以使用通配符执行命令

[英]Powershell script appears to execute command with wildcard

我正在编写将在远程服务器上执行命令的PowerShell脚本。 我在脚本中使用单个变量作为该命令的参数。

param(
    [Parameter(Mandatory=$true)][string]$strUser
)

$strDomain = "company.com\\"
$strFQusername = $strDomain + $strUser

$strFQusername
$strFQusername
$strFQusername

Invoke-Command -computername VMwareView.company.com -scriptblock {. $env:userprofile\document\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 ; Get-RemoteSession -username $strFQusername } -credential company.com\administrator

$strFQusername
$strFQusername
$strFQusername

当我执行此脚本时, $ strFQusername变量似乎被通配符替换。 Get-RemoteSession cmdlet可以正确执行,但是它列出了所有用户的会话,而不仅仅是$ strFQusername变量指定的用户。 这相当于我输入Get-RemoteSession -username *

如果我在脚本中对用户名进行硬编码,则会得到预期的输出。 也就是说,我只看到我硬编码到脚本中的用户名的会话。

我试过在$ strDomain变量中使用单反斜杠和双反斜杠,但结果相同。 在Invoke-Command行之前和之后看到的$ strFQusername的3行均用于调试。 它们精确地打印出我希望看到的存储在$ strFQusername中的字符串

我想念什么?

如果有ps3 +,请使用修饰符$using如果有ps2 ,请使用paramétrer- -argumentlist

Ps3 +

..Get-RemoteSession -username $using:strFQusername

PS2

...{Param ($user)....Get-RemoteSession -username $user} -arg $strFQusername

脚本块不知道其外部的变量,因此您需要通过-ArgumentList参数将它们传递到脚本块中:

Invoke-Command -computername VMwareView.company.com -scriptblock {
  . $env:userprofile\document\WindowsPowerShell\Microsoft.PowerShell_profile.ps1;
  Get-RemoteSession -username $args[0]
} -ArgumentList $strFQusername -credential company.com\administrator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM