2014-09-30 87 views
0

我正在寫一個PowerShell腳本來執行遠程服務器上的命令。我在腳本中使用單個變量作爲該命令的參數。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變量,但得到了相同的結果。您在調用命令行前後看到的3行$ strFQusername用於調試。他們打印出我想要看到的字符串,存儲在$ strFQusername

我錯過了什麼?

回答

0

,如果你有PS3 +或paramétrer-argumentlist如果PS2

PS3的+使用修改$using

..Get-RemoteSession -username $using:strFQusername 

Ps2的

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

的腳本塊不知道它外面的變量,所以你需要通過-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