我正在尝试从表达式中删除字符,而没有选择定义另一个整数的选项。 这是我目前拥有的表情:
Get-ADUser -Identity $PSItem -Properties mail, manager, l, title |
Select-Object -Property Name, SamAccountName, Mail, l, title, @{
Name = "ManagerGID"
Expression = { (Get-Aduser -identity $psitem.manager).samaccountname }
},
@{
Name = "ManagerName"
Expression = { (Get-Aduser -identity $psitem.manager).name }
},
@{
Name = "PicURL"
Expression = {
(ConvertFrom-Json -InputObject (Invoke-WebRequest ('http://picasaweb.google.com/data/entry/api/user/' + $psitem.mail + '?alt=json')) |
Select-Object -ExpandProperty entry |
Select-Object -ExpandProperty 'gphoto$thumbnail')
}
}
对于PicURL选项,来自Google的gphoto $ thumbnail的结果将类似于以下内容:
@{$t=https://lh3.googleusercontent.com***********.jpg}
我想删除属性开头和结尾的@{$t=
和}
。不幸的是,如果不从管道中删除该表达式,就找不到合适的方法,这对于其余的代码不是很有效。
如果您好奇的话,这是为了从AD中自动创建组织结构图,其中包括google个人资料图片。
答案 0 :(得分:0)
看到输出@{$t=https://lh3.googleusercontent.com***********.jpg}
的含义是您输入对象的gphoto$thumbnail
属性值是一个自定义对象,具有单个名为$t
的属性,其值是感兴趣的URL。 [1]
因此,您可以简单地追加另一个Select-Object
调用以提取$t
属性的值:
... | Select-Object -ExpandProperty '$t'
请注意,需要单引号('...'
)属性名称$t
,以免将其误认为变量引用,与属性名称相同gphoto$thumbnail
需要单引号。
或者,在v3 +中,将当时的三个Select-Object -ExpandProperty
调用合并为一个ForEach-Object
调用:
... | ForEach-Object { $_.entry.'gphoto$thumbnail'.'$tp' }
[1]这种类似于哈希表的 表示是PowerShell用于对[pscustomobject]
实例进行字符串化的内容。