2

第一次在这里发帖!

我正在寻求改进对 Windows 2008 R2 上 DFS 复制的监控,因此无法访问 2012 及更高版本可用的更好的 PS cmdlet。我遇到了一个奇怪的问题,想知道如何摆脱它,好吗?我有点 PS 新手,所以我希望解决方案足够简单。:-)

我使用 WMI 查询 DFSR VolumeInfo(参见ref),所以:

$DFSVolumeInfo = gwmi -Namespace "root\MicrosoftDFS" -Computer $DFSServer -query "select * from DfsrVolumeInfo"

现在,如果我没有返回,然后加上引号:

write-host $DFSVolumeInfo.VolumePath

\\.\E: \\.\D:

write-host "$DFSVolumeInfo.VolumePath"

\\DC2-SRV-DFS01\root\MicrosoftDFS:DfsrVolumeInfo.VolumeGuid="6C4C4203-2BC9-11E4-9EF3-0050568815FA"

\\DC2-SRV-DFS01\root\MicrosoftDFS:DfsrVolumeInfo.VolumeGuid="D214D634-F794-11E3-9EF3-0050568815FA".VolumePath

后者也给出了VolumeGuid

该类为VolumePath

VolumePath 数据类型:字符串 访问类型:只读 限定符:DisplayName ("Replication Group GUID") 卷路径格式;这是要么\\.\C:要么\\?\volume{GUID}

无论如何要返回 VolumePath,即引号内的 C:、D: 等,而不是 GUID?

输出需要更具人类可读性,因此我将用引号回显输出,即"$DFSVolumeInfo.VolumePath on $DFSServer has a state of $DFSVolumeInfo.State"

4

1 回答 1

1

您可以像这样直接在字符串中嵌入变量:"$Variable"但是如果您需要更复杂的语句,即使只是访问一个属性,它也只会嵌入变量名(.以及之后的所有内容,当嵌入到字符串中时,将按字面意思解释) )。你有几个选择:

子表达式

"Here's a thing: $($DFSVolumeInfo.VolumePath) <-- that's a thing"

首先评估内部的任何内容,$()然后将其插入字符串中。它可能是一个完整的 powershell 程序。

级联

"Here's a thing: " + $DFSVolumeInfo.VolumePath + " <-- that's a thing"

将其分开并将值相加。

格式-f运算符

"Here's a thing: {0} <-- that's a thing" -f $DFSVolumeInfo.VolumePath

使字符串成为格式表达式,然后它会填充您传递给运算符右侧的值。

预填充变量

$computedValue = $DFSVolumeInfo.VolumePath
"Here's a thing: $computedValue <-- that's a thing"
于 2015-09-16T15:08:36.383 回答