Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 在enter pssession中自动输入密码_Powershell_Powershell Remoting - Fatal编程技术网

Powershell 在enter pssession中自动输入密码

Powershell 在enter pssession中自动输入密码,powershell,powershell-remoting,Powershell,Powershell Remoting,我目前正在Powershell ISE中制作一个Powershell脚本,用于输入我们托管的所有服务器,并从服务器ActiveDirectory获取所有用户。要做到这一点,我必须自动连接到所有服务器(有许多服务器,但我们只需要访问42个)。让我解释一下到目前为止我做了什么以及实际的问题是什么 正如您所知,有许多不同的服务器,因此我们必须从同事制作的excel文件中读取所有服务器IP:S/用户名/密码,然后将它们放入数组中 从那里,我们制作了一个for循环,如下所示: for ($S = 0; $

我目前正在Powershell ISE中制作一个Powershell脚本,用于输入我们托管的所有服务器,并从服务器ActiveDirectory获取所有用户。要做到这一点,我必须自动连接到所有服务器(有许多服务器,但我们只需要访问42个)。让我解释一下到目前为止我做了什么以及实际的问题是什么

正如您所知,有许多不同的服务器,因此我们必须从同事制作的excel文件中读取所有服务器IP:S/用户名/密码,然后将它们放入数组中

从那里,我们制作了一个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地址上找到的行号,然后使用该行号找到要在特定服务器上登录的正确用户名和密码

问题是,我必须在powershell中为每台服务器输入密码。我只想在enter PSSession的同一行输入它

如果你想要更具体的细节,请告诉我。另外,我对这种类型的脚本编写还不熟悉,所以如果您在解释中尽可能简单,那就太好了:)


谢谢。

这里的问题是如何传递“凭证”参数。它应该是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命令

例如


这里的问题是如何传递“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命令

例如

Hi-CmdrTchort/Richard(:p)。谢谢你的回答

出于安全原因,Excel文件中的所有密码都是加密的。我目前正在开发一个函数,该函数将在使用密码之前解密密码

我在网上多看了一下,偶然发现了这篇文章:

我尝试了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]
}
当我关闭提示时,提示会出现,因此密码不会自动填写。我得到这个错误:

New PSSession:找不到接受参数“(encryptedpassword)”的位置参数。 在C:\xxxxxxx\xxxxx\xxxxxx\superfle.ps1:109字符:16 + ... $会话=新建pssession-computername$ServerAddressArray[$arg1]-cr。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidArgument:(:)[New PSSession],ParameterBindingException +FullyQualifiedErrorId:PositionParameterNotFound,Microsoft.PowerShell.Commands.NewPSSessionCommand

我是否必须输入某种位置参数,或者它现在可以工作,因为它是加密的

Hi-CmdrTchort/Richard(:p)。谢谢你的回答

出于安全原因,Excel文件中的所有密码都是加密的。我目前正在开发一个函数,该函数将在使用密码之前解密密码

我在网上多看了一下,偶然发现了这篇文章:

我尝试了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]
}
当我关闭提示时,提示会出现,因此密码不会自动填写。我得到这个错误:

New PSSession:找不到接受参数“(encryptedpassword)”的位置参数。 在C:\xxxxxxx\xxxxx\xxxxxx\superfle.ps1:109字符:16 + ... $会话=新建pssession-computername$ServerAddressArray[$arg1]-cr。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidArgument:(:)[New PSSession],ParameterBindingException +FullyQualifiedErrorId:PositionParameterNotFound,Microsoft.PowerShell.Commands.NewPSSessionCommand


我是否必须输入某种位置参数,或者它现在可以工作,因为它是加密的

-凭据$cred
无法连接到远程服务器:访问被拒绝至少它正在连接,更进一步。您是否尝试按照@CmdrTchort的建议将密码管道传输到
ConvertTo SecureString-AsPlainText-Force
,而不是使用
AppendChar()
?我被延迟了。我可能被拒绝访问,因为我试图连接的密码是加密的。解密功能完成后,我会与您联系。
-credential$cred
无法连接到远程服务器:访问被拒绝至少它正在连接,更进一步。您是否尝试按照@CmdrTchort的建议将密码管道传输到
ConvertTo SecureString-AsPlainText-Force
,而不是使用
AppendChar()
?我被延迟了。我可能被拒绝访问,因为我试图连接的密码是加密的。解密功能完成后,我会给你回复的。