使用Powershell noteproperty作为变量中的文本字符串

时间:2014-05-15 15:49:21

标签: powershell pscustomobject

我使用Invoke-Restmethod将一些数据(Powershell存储在PSCustomObject中)下载到一个名为data的属性中。

我需要使用返回数据中某个项的值作为另一个命令的变量。我已经设法选择对象 - 扩展到Get-Member的以下输出:

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
id          NoteProperty System.Int32 id=999 

我需要做的是获取ID noteproperty的值 - 999 - 并将其作为字符串的一部分传递给新变量,例如:

$newVar = "sometext" + 999 + "moretext"

没有多少select-string或out-string等有帮助。脚本编写并不是我的强项,所以我不确定我是否正确地表达了我想要的内容 - 如果是这样的话,请道歉!

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

我不确定你的代码和外观是什么,所以我从描述中创建了以下静态近似值:

$data = New-Object PSCustomObject
$data | Add-Member -Type NoteProperty -Name Id -Value 999
$restResponse = New-Object PSCustomObject
$restResponse | Add-Member -Type NoteProperty -Name data -Value $data

请澄清这是不匹配的。您可以按如下方式获取Id值

$restResponse.data.Id

将其分配给另一个变量

$newVar = "sometext" + $restResponse.data.Id + "moretext"
$newVar

如果您的REST响应是数据对象的集合,则迭代它们

$restResponse.data | Foreach-Object { "sometext" + $_.Id + "moretext" }

答案 1 :(得分:0)

我会推荐使用$output | select *,@{n='test';e={[string]$_.test}}-排除属性测试

如果排除未激活,它将抱怨它已经存在。通常,对于这种简单的任务,我使用select表达式而不是psCustomObject来实时处理数据