簡體   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