Powershell:如何使用存储的非明文用户名/密码连接到不同域上的网络文件夹

时间:2011-01-11 19:00:10

标签: networking powershell network-programming share

我正在尝试通过PowerShell连接到网络共享。网络共享位于不同的域中,因此我需要提供凭据。由于 New-PSDrive 不支持凭据,我打算使用 net use ,但我担心将我的用户名/密码以明文形式放入脚本中。我强制 ConvertTo-SecureString 从我的密码中创建一个安全的字符串,然后使用 ConvertFrom-SecureString 并将结果存储在一个文件中。然后,我将其从文件中删除,并尝试 net use

$password = Get-Content <locationOfStoredPasswordFile> | ConvertTo-SecureString
net use q: "\\server\share" $password /user:domain\username

净使用无法识别安全字符串。

任何人对如何存储凭据都有任何想法,因此净使用可以使用它们吗?谢谢!

1 个答案:

答案 0 :(得分:7)

这是我用来加密/解密字符串的两个函数。他们改编自powershell.com帖子,但我没有方便的链接。想法是你的密码文件将存储Protect-String的输出,然后转换回常规字符串,读入文件并调用UnProtect-String,从UnProtect字符串返回的值将是你的$ password变量。

#######################
function Protect-String 
{
    param([string]$InputString)
    $secure = ConvertTo-SecureString $InputString -asPlainText -force
    $export = $secure | ConvertFrom-SecureString
    write-output $export

} #Protect-String

#######################
function UnProtect-String 
{
    param([string]$InputString)

    $secure = ConvertTo-SecureString $InputString
    $helper = New-Object system.Management.Automation.PSCredential("SQLPSX", $secure)
    $plain = $helper.GetNetworkCredential().Password
    write-output $plain

} #UnProtect-String