2016-07-25 146 views
0

我目前正在Powershell ISE中製作Powershell腳本,該腳本將用於輸入我們託管的所有服務器並從服務器ActiveDirectory中獲取所有用戶。要做到這一點,我必須自動連接到所有服務器(有很多服務器,但只有42我們需要訪問)。讓我解釋我到目前爲止所做的以及實際問題。因此,如你所知,有許多不同的服務器,所以我們必須讀取所有服務器的IP:S /用戶名/密碼從同事所做的Excel文件中,然後將它們放入數組中。在enter-pssession中自動輸入密碼

從那裏,我們做了一個for循環看起來像這樣:

for ($S = 0; $ -le $ServerAdressArray.Length; $S++) 
{ 

    if ($ServerAdressArray[$S] -like '192.168.*.10') 
    { 
     GetData($S) 
    } 

} 

它所做的是要通過陣列過濾掉從陣列中的所有本地IP-不會忽略,如果它發現一個本地IP地址,它運行的GetData功能看起來像這樣的時刻:

function GetData([int]$arg1) 
{ 
    Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential $UsernamesArray[$arg1] $PasswordArray[$arg1] 
} 

我希望它做的就是用它發現本地IP-ADRESS的行號,然後使用該號碼來找到正確的用戶名和密碼在特定服務器上登錄。

問題是,我必須在PowerShell中輸入密碼,每個單個服務器。我只想在Enter-PSSession的同一行輸入它。

如果你想了解更多的細節,請告訴我。另外,我對這種類型的腳本很陌生,所以如果你在你的解釋中感到冷靜,那將是非常好的:)

謝謝。

回答

2

這裏的問題是你如何傳遞「Credential」參數。它應該是PSCredential類型的。

假設您已經明文存儲的用戶名和密碼在你的文件,您可以直接創建憑據對象:

New-Object PSCredential -ArgumentList @("a", ("p"|ConvertTo-SecureString -AsPlainText -Force)) 

對於示例:

Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) 

然而,如果您有興趣將每臺服務器的某些數據返回給正在執行的主機(例如,爲了進一步處理),則您不想進入該會話,而是希望使用Invoke-command。

E.g.

Invoke-command -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) -Scriptblock $scriptblockToExecute 
0

Hi CmdrTchort/Richard(:P)。謝謝你的回答!

出於安全原因,excelfile中的所有密碼都被加密。我目前正在開發一個函數,在使用密碼之前解密密碼。

我四處張望了一下更在互聯網上,我偶然發現了這個帖子: Using PowerShell credentials without being prompted for a password

我試過的Jeroen Landheer所說的話和函數現在看起來是這樣的:

function GetData(int[$arg1]) 
{ 
    $secstr = New-Object -TypeName System.Security.Securestring 
    $PasswordArray[$arg1].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)} 
    $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr 

    $session = new-pssession -computername $ServerAdressArray[$arg1] -credential $UserNameArray[$arg1] $PasswordArray[$arg1] 
} 

的提示正在出現,所以密碼沒有自動填寫,當我關閉提示(S)。我收到此錯誤:

New-PSSession:無法找到接受參數'(encryptedpassword)'的位置參數。 在C:\ xxxxxxx \ xxxxx \ xxxxxx \ superfile.ps1:109 char:16 + ... $ session = new-pssession -computername $ ServerAdressArray [$ arg1] -cr ... + ~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo:InvalidArgument:(:) [新的PSSession],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewPSSessionCommand

我一定要進入某種位置參數的還是它現在的工作因爲它的加密?

+0

'-credential $ cred' –

+0

不起作用Mathias – tTim

+0

無法連接到遠程服務器:訪問被拒絕 – tTim