当使用批处理或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)