2017-10-11 388 views
0

我是Powerhell的新手,尝试从脚本解码以下行:在PowerShell中的-f是什么意思?

Get-WmiObject -class MSFC_FCAdapterHBAAttributes -namespace“root \ WMI”|的foreach对象{(($ .NodeWWN)|的foreach对象{“{0:X}” -f $})}

脚本可在:https://gallery.technet.microsoft.com/scriptcenter/Find-HBA-and-WWPN-53121140

我更感兴趣的是“ForEach-Object {”{0:x}“-f $ _}”

“{0:x}”是什么意思?

那么-f对当前对象$ _做什么?

当我在Windows服务器上运行脚本时,发现其中一个NodeWWN条目: NodeWWN:{32,0,0,16 ...}现在转换为: 20:00:00: 10:9B:17:9E:28

如果这里的专家能够帮助我指出发生了什么,我们将非常感激。

回答

1

-f格式操作者,在about_operators描述:

-f格式操作者

格式通过使用字符串对象的格式方法字符串。在运算符左侧输入格式字符串,并在运算符右侧输入要格式化的对象。

PS> "{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi 

# 1 hello  3.14 

有关详细信息,请参阅String.Format方法和Composite Formatting

表达

<a> -f <b> 

相当于调用

[string]::Format(<a>, <b>) 

这也意味着,在格式字符串占位符遵循相同的规则如在别处。一般的占位符是{0},{1}等,它们可以有一个格式插入占位符的类型,就像在你的例子中使用{0:x}那样会将一个整数格式化为一个十六进制数。当然,CLR中各种类型的预定义和自定义格式字符串可以在.NET documentation中找到。

0

-f运算符将其左侧参数作为所需输出的描述,将其右侧参数作为要插入到该字符串中的值的数组。 {0:x}指定如何格式化参数;描述可在SS64's page on the -f operator找到。

0

这是完全有道理的。我试图打印出NodeWWN的内容作为是: {32,0,0,16,155,23,158,40}

与琴弦fomrat操作,其中它从整数转换为十六进制的帮助下,我查看输出 20,0,0,10,9b,17,9e,28这是我最初发布的问题的答案。

非常感谢帮助我弄清楚这一点。感谢所有的帮助!