首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带连字符的Powershell -like语法

带连字符的Powershell -like语法
EN

Stack Overflow用户
提问于 2013-10-06 00:45:06
回答 4查看 5K关注 0票数 0

这可能是个新问题,但我已经花了几个小时在这个问题上。我正在创建一个powershell脚本,试图确定条目是否已经存在。(这是用于Exchange多租户解决方案的)此工作:

Get-GlobalAddressList ({$_.Identity -Like“\MyCompany_com*”)}

但这是失败的:

Get-GlobalAddressList ({$_.Identity -Like "\MyCompany_com -GAL“)}

由于某种原因,我无法理解,条目中的空格将不匹配。

是的,我确信条目\MyCompany_com - GAL存在。我已经尝试了所有我能想到的使用-match,-eq,-contains的组合,任何帮助都是非常感谢的!

--编辑

尝试了一种新的机智,但仍然惨不忍睹:

代码语言:javascript
复制
$NewVal = "\MyCompany_com - GAL"
$Prop = Get-GlobalAddressList | Select Name
foreach($PropVal in $Prop.Name){
  write-output "comparing: $NewVal to $PropVal"
  if($NewVal -like $PropVal){write-output "MATCH"} else {write-output "no-match"}
}

写输出“显示”与字符匹配的字符。

我已经用许多语言编写了三十多年的脚本,但是这个PowerShell垃圾让我感到困惑。#frustrated#

--编辑#2 (显示输出)?

代码语言:javascript
复制
comparing: MyCompany_com - GAL to MyCustomer_com - GAL
no-match
comparing: MyCompany_com - GAL to MyCompany_com - GAL
no-match
comparing: MyCompany_com - GAL to Default Global Address List
no-match

有没有办法强制进行字符串比较?

太空角色还在搞砸我吗?

--编辑#3 (仍在尝试)?

我特意创建了一个新的GlobalAddressList:"MCC-GAL",没有空格。

这仍然不起作用:

Get-GlobalAddressList ({$_.Name -Like“MCC”)}

然而,这确实符合:

Get-GlobalAddressList ({$_.Name -Like“MCC?GAL”)}

因此,除了空格字符之外,连字符(-)还会导致匹配问题。我确实试图避开连字符:"-",但仍然没有匹配。

有没有办法强制进行简单的字符串比较?用于构建比较字符串的方法将是我需要匹配的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-06 20:02:17

当我为GetAddressList做了一个工作的时候,我的脚本的下一部分我被迫解决了这个问题。

决心:我和@power 2460798有着同样的担忧,但是我觉得可以忽略它,因为我用“普通”的破折号复制/粘贴到了power-shell线路上-- GlobalAddressList名称。事实证明,我们复制的示例命令包含了en-破折号。哎哟,吸取教训。为我和我的同事浪费了超过14个小时。#crying#

我最后偶然发现了一个脚本,How to convert a ascii string into a decimal representative string in a powershell script? ,经过一些小小的修改,我就可以发现AD中存储的值实际上是一个"en- dash ",char8211 (普通的破折号是char045)。

因此,下面是与我试图检索的条目相匹配的命令:

代码语言:javascript
复制
Get-GlobalAddressList | Where{$_.Name.replace([convert]::ToChar(8211),"-") -eq "MyCompany_com - GAL"}
票数 3
EN

Stack Overflow用户

发布于 2013-10-06 01:47:25

如果您输入以下内容,您会得到什么:

代码语言:javascript
复制
"\MyCompany_com - GAL" -like "\MyCompany_com - GAL"

如果这是可行的,那么它强烈地表明$_.Identity属性中包含一些与您所想的不同的字符。这里有一种方法,您可以确切地看到字符串包含哪些字符:

代码语言:javascript
复制
[char[]]$stringWithOddCharacters   # breaks the string into characters
[byte[]][char[]]$stringWithOddCharacters   # converts each character into a byte

所以你可以做这样的事

代码语言:javascript
复制
Get-GlobalAddressList | foreach-object {
  if ($_.Identity -Like "\MyCompany_com*") {
    [char[]]($_.Identity.ToString())
    [byte[]][char[]]($_.Identity.ToString())
  }
}

看看身份财产里到底有什么。请注意,如果标识包含未转换为ASCII的Unicode字符,则需要将[byte[]]更改为[int16[]]

票数 0
EN

Stack Overflow用户

发布于 2013-10-06 16:09:17

事实证明,我能够匹配GlobalAddressList对象中的另一个对象:

代码语言:javascript
复制
Get-GlobalAddressList | Where{$_.ConditionalCustomAttribute1 -eq "MMC"}

由于这是一个多租户解决方案,我们一直在为ConditionalCustomAttribute1对象添加一个值,该值(在我们的情况下)将是唯一的,因此适合于测试是否存在。

这没有回答最初的问题,但它解决了我的脚本任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19204227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档