2016-07-25 344 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