场景:
假如现在需要用Powershell脚本批量验证多台服务器的密码,而且这些服务器的用户名和密码都不相同,那么这个时候就相当于在一个命令中需要读取和输入三个变量(服务器名称,用户名,密码)。这种场景下,用Get-Content无法实现同时输入三个变量,之前借助于读取Excel文件实现,但是读取EXCEL需要要求执行脚本的电脑一定要安装EXCEL,有些公司软件许可证管理的比较严格。后来,发现用Import-CSV 也可以实现。故分享一下段简单代码,演示一下基本方法,希望可以给大家一些启发。
D:\Samples.csv, 内容如下:
为了方便理解如何取值,加入IP栏位作为参考比较,但是在代码中不取IP的值。
==========================================================
Server,IP,Username,Password
TestServer1,TestIP1,TESTUser1,Testpassword1
TestServer2,TestIP2,TESTUser2,Testpassword2
==========================================================
演示代码如下:
==========================================================
$Contents=Import-Csv D:\Servers.csv #将CSV文件中内容导入,,赋值给变量为了利用数组进行逐个读取;
#用for 循环,逐个读取,CSV和EXCEL 类似,我们取对应的Server,Username,Password 三个栏位的值.
for ($i=0;$i -le 1;$i++){
$Server=$Contents.Server[$i]
$User=$Contents.UserName[$i]
$PWD=$Contents.Password[$i]
Write-Host “The $i line Servername is $Server”
Write-Host “The $i line Usernane is $User”
Write-Host “The $i line Password is $PWD”
}
==============================================================
输出结果如下:
==============================================================
The 0 line Servername is TestServer1
The 0 line Usernane is TESTUser1
The 0 line Password is Testpassword1
The 1 line Servername is TestServer2
The 1 line Usernane is TESTUser2
The 1 line Password is Testpassword2
==============================================================
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
for的判断条件错了吧
当时写的时候,只是简单的示范一下,用了两行,所以写了1,
更新了一下:
$Contents=Import-Csv D:\Servers.csv #将CSV文件中内容导入,,赋值给变量为了利用数组进行逐个读取;
$csvrows=($Contents | Measure-Object).Count #统计csv中的行数
#用for 循环,逐个读取,CSV和EXCEL 类似,我们取对应的Server,Username,Password 三个栏位的值.
for ($i=0;$i -le ($csvrows-1); $i++ ){
$Server=$Contents[$i].Server
$User=$Contents[$i].UserName
$PWD=$Contents[$i].Password
Write-Host “The $i line Servername is $Server”
Write-Host “The $i line Usernane is $User”
Write-Host “The $i line Password is $PWD”
}
$Server=$Contents.Server[$i] 貌似应该改为 $Server=$Contents[$i].Server
对于Powershell读取csv来说,两种都OK,
但是对于代码可读性来说,确实$Server=$Contents[$i].Server 更好。