Powershell Oddity返回带有和不带引号的DFSR Volumepath

时间:2015-09-16 14:52:34

标签: powershell dfs

首先发布在这里!

我正在寻求改进对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 (“复制组GUID”)卷路径格式;这可以是\\.\C:\\?\volume{GUID}

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

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

1 个答案:

答案 0 :(得分:1)

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

子表达

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

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

级联

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

将它拆开并将值加在一起。

The format -f operator

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

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

预填充变量

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