如何在不必硬编码密码的情况下静默运行远程PowerShell命令?

问题描述 投票:0回答:1

我想跑:

Invoke-Command -Computer $computer -ScriptBlock {...}

但是我收到错误“访问被拒绝”winrm错误,我对使用以下内容犹豫不决:

Invoke-Command -Computer $computer -Credential $cred -ScriptBlock {...}

其中$ cred是:

$username = "John Doe"
$password = "ABCDEF"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -
argumentlist $username, $secstr

它必须远程运行,必须保持沉默。所以我不能在剧本中弹出PSCredential弹出窗口。

有人可以给我看一下或给我一份文件,告诉我一个可能的解决方案吗?

先感谢您。

powershell credentials
1个回答
1
投票

您可以做的一件事是加密密码并将其保存到磁盘。然后,您可以读取该文件,并将加密的密码转换为安全字符串,并从中创建凭证对象。请注意,这必须使用将用于运行脚本的帐户来完成。

'$uper$secret1' | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Set-Content .\AccountPass.txt

这会将您的密码保存到文本文件中的磁盘上。如果您打开文本文件,它将类似于:

01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b584d55e9c47c942904dd30531d3ad070000000002000000000003660000c0000000100000003060266c3c4333a41e7f0e92176fb3d50000000004800000a000000010000000a2c8bbb2a3666c092004bb5e66fd440320000000636a413a6905789e0f3521cea3d8703405897cd5948da955192bcccd08990ffc1400000068c1

5f8ac088ef0972dfce7d5a20ff3bbcdac4cc现在,创建该文件的帐户将是唯一可以解密它的帐户,但该帐户可以运行:

$Password = Get-Content .\AccountPass.txt | ConvertTo-SecureString
$Creds = New-Object System.Management.Automation.PSCredential ("$env:UserDomain\$env:UserName",$Password)

现在您有了一个凭证对象,而无需以明文形式保存密码。如上所述,可以解密文本文件中密码的唯一帐户是生成文本文件的帐户,并且每当密码更改时都必须更新文本文件。

© www.soinside.com 2019 - 2024. All rights reserved.