繁体   English   中英

Powershell-在从IP,FQDN和主机名创建变量并使用它们来ping之前,从hosts文件的每一行中删除所有空格

[英]Powershell - strip all whitespace from each line in hosts file before creating variables from IP, FQDN & Hostname & using these to ping

假设我们有一个主机文件:

10.10.10.10    test1.domain test1
20.20.20.201   test2.domain test2
30.30.301.30   test3.domain test3
40.40.40.40    test4.domain test4

请注意主机标识符中具有3位数字的IP,请记住,每行的结构略有不同,因为具有2位数字的IP在IP和FQDN之间具有更多的空格。 牢记这些差异,怎么办:1.从每条线路中提取FQDN,并在遍历每条线路时执行ping操作;或2.完全剥夺IP,然后遍历每个条目,在执行过程中对每个FQDN进行ping操作?

我似乎无法执行选项1,最接近选项2的方法是:

Get-Content hosts | ForEach-Object { $_Split()[3]; }

但是,这只会打印出主机标识符中包含3位数字的那些主机,而那些具有2位数字的主机在IP和FQDN之间具有更大的空格,因此它将FQDN视为位于第4个字段。

有人可以帮忙吗? 我对来自UNIX背景的PowerShell相当陌生。

Powershell中的字符串是.Net字符串对象,因此包含强大的操作方法。 可以告诉Split() 省略空元素。 像这样

# Read host list
$data = Get-Content C:\Temp\hostlist.txt
# Split each row from the file. Use space to split, omit empty elements
# Thus element 0 is the IP, 1 is the FQDN, 2 is the hostname
$data | ForEach-Object { ($_.split(" ", [StringSplitOptions]::RemoveEmptyEntries))[1] }

# Output
test1.domain
test2.domain
test3.domain
test4.domain

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM