删除表达式Powershell中的字符

时间:2018-12-13 16:03:39

标签: powershell

我正在尝试从表达式中删除字符,而没有选择定义另一个整数的选项。 这是我目前拥有的表情:

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个人资料图片。

1 个答案:

答案 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]实例进行字符串化的内容。