2016-03-31 19 views
0

Bazı sunucularından Olay Günlükleri almak zorunda ve ben bulunursa her sunucu için kimlik bilgileri okumak istemiyorum.Değişkenleri Invoke-Command cmdlet'iyle nasıl geçiririm?

Ben argumentList parametresini kullanarak benim değişkenleri geçmek denedim ama çalışmıyor.

Bu benim kodudur:

$User = Read-Host -Prompt "Enter Username" 
$Password = Read-Host -Prompt "Enter Password" -AsSecureString 
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password) 
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 

Get-ADComputer -Filter "OperatingSystem -Like '*Server*'" | Sort-Object Name | 
ForEach-Object{ 
    if($_.Name -like '*2008*'){ 
     Invoke-Command -ComputerName $_.Name -ArgumentList $User, $UnsecurePassword -ScriptBlock { 
      net use P: \\Server\dir1\dir2 /persistent:no /user:$User $UnsecurePassword 
      Get-EventLog -LogName System -After (Get-Date).AddHours(-12) -EntryType Error, Warning | format-list | 
      out-file P:\EventLog_$env:COMPUTERNAME.log 
      net use P: /delete /yes 
     } 
    } 
} 
Ben ınvoke Komuta ScriptBlock değişkenleri nasıl kullanabilirim

?

cevap

2

Ya da scriptblock başında parametrelerini beyan:

{ 
     param($user,$unsecurepassword) 
     net use P: \\Server\dir1\dir2 /persistent:no /user:$User $UnsecurePassword 
     Get-EventLog -LogName System -After (Get-Date).AddHours(-12) -EntryType Error, Warning | format-list | 
     out-file P:\EventLog_$env:COMPUTERNAME.log 
     net use P: /delete /yes 
    } 

Ya da argümanlar $args değişkeni kullanarak acces: Alternatif MSDN

+0

Çalışıyor. Çok teşekkürler! – Lucas93

+1

Sadece '' Paragraf() 'içindeki değişkenlerinizin, -ArgumentList’ten geçtiğinizle eşleştiğinden emin olun. $ Bilgisayarımın kullanıcı ID lol olarak görünmeye devam etmesi zor bir yolu öğrendim – nkasco

2

şunları yapabilirsiniz:

#first passed parameter 
$args[0] 
#second passed parameter 
$args[1] 
.... 

Belgeler $Using: kapsamını kullanın. Bu link altındaki Örnek 5'e bakın.

Örnek:

$servicesToSearchFor = "*" 
Invoke-Command -ComputerName $computer -Credential (Get-Credential) -ScriptBlock { Get-Service $Using:servicesToSearchFor } 

$Using: ile -ArgumentList parametreyi ve scriptblock içinde param blok gerekmez.

İlgili konular