PowerShell脚本保存密码

时间:2022-09-09 16:06:25

  当使用批处理或VBS脚本访问远程计算机的时候,我们可以直接将其用户名和密码写入到脚本中,但是在PowerShell中,则不允许直接将密码写入其中,这虽然在很大程度上提高了脚本的安全性,但有时候却也给我带来了一些麻烦。
  如果我们要获取计算机(192.168.12.6)的系统信息,则需要使用Get-Credential命令来提供凭据(用户名+密码),可以先将凭据保存到一个变量中,如

  $a = get-credential

  回车后则弹出窗口要求输入用户名和密码,输入完成后,则会保存在变量$a中,然后在通过如下命令进行调用

  Get-WmiObject Win32_OperatingSystem -Credential $a -Computer 192.168.12.6

  如果只是一台计算机还好,如果有多台计算机,并且其用户名和密码都不相同,则需要输入N遍,带来很大的麻烦。为了解决这个问题,我们可以通过新建对象的方法来保存用户名和密码,将其写入到脚本中。

  下面先来看看$a对象的类型及其相应的属性,可以得知对象类型名称为:System.Management.Automation.PSCredential,其中的Password和UserName都是其属性,所以可以新建一个该类型的对象。在此处需要注意的是Password类型为SecureString,UserName类型为String,所以需要将明文的Password转换为安全字符串,可以使用ConvertTo-SecureString命令。

详细代码如下:

1 $UserName = "administrator"
2 #将纯文本字符串“boc.123”转换为安全字符串,并将结果存储在 $Password变量中
3 $Password = ConvertTo-SecureString "boc.123" -AsPlainText –Force
4 #新建对象
5 $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password)
6 Get-WmiObject Win32_OperatingSystem -Credential $cred -Computer 192.168.12.6

 

方法二:

1 $sec = New-Object System.Security.SecureString
2 $user = "administrator"
3 $pw="password"
4 foreach($item in ($pw.GetEnumerator()))
5     { $sec.AppendChar($item) }
6 $Cred = New-Object System.Management.Automation.PSCredential ($user,$sec)