小编Lar*_*old的帖子

Powershell 2:如何确定cmdlet可以抛出的异常?

回到我(有限的)java编程时代,我记得这个很好的功能,如果我试图进行可能抛出异常的调用,java会要求我处理该异常或将其传递给可能的东西.

无论如何,我正在写一段与Active Directory中的对象混淆的PowerShell代码,所以我想要非常非常小心.我偶尔会遇到远程超时错误,这引出了我更普遍的问题:

"我怎么能提前知道哪些cmdlet可以抛出异常表明危险情况,以及那些可能的异常列表是什么?"

我想知道每个cmdlet的异常列表是否太长,无法解决所有可能性.我也不想只编写一个通用的异常处理程序,因为PowerShell似乎在错误处理的一般意义上做得很好.

确定每个cmdlet可以发生的所有异常列表的最佳方法是什么?这甚至可行/可行吗?

谢谢!

error-handling powershell exception

5
推荐指数
1
解决办法
1447
查看次数

Powershell 2:无法抑制警告消息

我正在对PowerShell 2中的'set-distributiongroup'进行cmdlet调用.我只是将参数'hiddenFromAddressListsEnabled'的值设置为预定义的布尔值.

但是,无论我尝试什么,如果布尔赋值实际上没有改变'hiddenFromAddressListsEnabled'的当前值,它会显示一条警告消息.

这是我正在调用的主要命令:

set-DistributionGroup -identity TestGroup                  `
                      -hiddenFromAddressListsEnabled=$true
Run Code Online (Sandbox Code Playgroud)

让我们在语义上将我上面的内容定义为"命令".

现在,我尝试添加几种不同的变体,所有变体都具有正确的行继续和语法.以下是这些变体:

command > $null
command 2> $null
command -ErrorAction:silentlycontinue
command -ErrorVariable $throwAway
command -WarningAction:silentlycontinue
command -WarningVariable $throwAway
$var = command
Run Code Online (Sandbox Code Playgroud)

无论上述一个或多个的各种组合如何,我仍然会得到一个黄色警告:消息吐出输出.具体来说,这个:

WARNING: The command completed successfully but no settings of
'<xxxxxx>/Users/TestGroup' have been modified.
Run Code Online (Sandbox Code Playgroud)

关于一个我不理解的关键概念的任何建议?我希望命令不生成此输出,并且我希望它在发生这种情况时以静默方式继续.

谢谢!!

powershell warnings

5
推荐指数
2
解决办法
3万
查看次数

Pylint:如何干净利落地压制事物,而不会产生随后的“压制消息”废话?

我有一个文件foo.py,可以广泛使用Faker第三方模块。这样,pylint会生成许多“无成员”错误。

我想在foo.py中禁用它们。因此,在顶部,我尝试插入:

# pragma pylint: disable=no-member
Run Code Online (Sandbox Code Playgroud)

但是,以相当烦人的方式,每次遇到这些错误之一时,pylint都会发出一条被抑制的消息,这完全打败了我的编译指示?

foo.py:1:0: I0011: Locally disabling no-member (E1101) (locally-disabled)
... other misc stuff ...
foo.py:177:0: I0020: Suppressed 'no-member' (from line 1) (suppressed-message)
foo.py:83:0: I0020: Suppressed 'no-member' (from line 1) (suppressed-message)
foo.py:85:0: I0020: Suppressed 'no-member' (from line 1) (suppressed-message)
Run Code Online (Sandbox Code Playgroud)

嗯...那太荒谬了。

所以我试图...抑制抑制消息?

# pragma pylint: disable=no-member,suppressed-message
Run Code Online (Sandbox Code Playgroud)

然后变得更好...

foo.py:1:0: I0011: Locally disabling no-member (E1101) (locally-disabled)
foo.py:1:0: I0011: Locally disabling suppressed-message (I0020) (locally-disabled)
foo.py:1:0: C0102: Black listed name "foo" (blacklisted-name)
.... misc stuff, actual things I should clean up …
Run Code Online (Sandbox Code Playgroud)

python pylint

5
推荐指数
1
解决办法
288
查看次数

PowerShell cmdlet参数的较短版本

根据我的研究,我不相信以下内容很容易实现,如果有的话.然而,作为最后的手段,我想我会在这里查看.

在Powershell 2.0中,我想要一种方法来将(恼人的)长参数名称减少到各种cmdlet.我想绝对控制速记版本的样子.(而不是PS使用的任何参数缩写方案的奴隶.)

所以,举例来说,我希望能够做到这样的事情:

# Command goes on this first line to alias "-ForegroundColor" to "-fg"
# Command goes on this second line to alias "-BackgroundColor" to "-bg"
Wr-te-Host -fg yellow -bg black "Parameter aliases now work just like I want."
Run Code Online (Sandbox Code Playgroud)

我最接近这个功能的是什么,以及如何?我无法使用'get-help about_parameters'找到有关参数缩写的任何内容.

谢谢!

parameters powershell alias cmdlet

4
推荐指数
2
解决办法
8276
查看次数

Powershell 2:返回值和调用者之间的数组大小不同

我一直在敲打我几个小时,谷歌没有帮助.

我有一个在我的代码中调用的函数.电话看起来像这样:

$newData = @(CreateMailContactIfNeeded $entry)
Run Code Online (Sandbox Code Playgroud)

调用的函数应始终返回2元素数组.我在被调用函数的return语句之前确认了这一点:

# ... (inside CreateMailContactIfNeeded) ...
$tmpArr = @("$contactString" , "external")
Write-Host "length is" $tmpArr.length
Write-Host "Contact string is ->"$contactString"<-"
return $tmpArr
Run Code Online (Sandbox Code Playgroud)

长度始终为2,并且联系人字符串始终为非null.样本输出:

length is 2
Contact string is -> GMSContact-33<-
Run Code Online (Sandbox Code Playgroud)

(我无法剥离字符串中的前导空格,所以我假设这是某种内部PowerShell字符串格式或其他东西)

但是,当我回到调用函数时,有时候,但并非总是如此,我从返回值构建的数组是长度为3:

if ($newData.length -eq 3) {
  Write-Host "Weird - array length is 3..."
}

Write-Host "Array length now is "$newData.length
foreach ($tmpVar in $newData) {
  Write-Host "Array entry is "$tmpVar
}
Run Code Online (Sandbox Code Playgroud)

3条目数组的第一个元素是有效字符串,但它是早期处理的工件:

Weird - array length is 3...
Array length …
Run Code Online (Sandbox Code Playgroud)

arrays string powershell function

4
推荐指数
1
解决办法
2669
查看次数

Powershell 2和.NET:针对极大的哈希表进行优化?

我正在涉足Powershell并且对.NET完全陌生.

我正在运行一个以空哈希表开头的PS脚本.哈希表将增长到至少15,000到20,000个条目.哈希表的键将是字符串形式的电子邮件地址,值将是布尔值.(我只需要跟踪我是否看过电子邮件地址.)

到目前为止,我一直在增加哈希表一个条目.我检查以确保键值对不存在(PS将在这种情况下出错),然后我添加该对.

这是我们谈论的代码部分:

...
    if ($ALL_AD_CONTACTS[$emailString] -ne $true) {
      $ALL_AD_CONTACTS += @{$emailString = $true}
    }
...
Run Code Online (Sandbox Code Playgroud)

我想知道从PowerShell或.NET的角度来看是否有任何可以做的事情可以优化这个哈希表的性能,如果你知道它会提前很大,比如15,000到20,000个条目或更多.

谢谢!

powershell hashtable powershell-2.0

3
推荐指数
1
解决办法
4112
查看次数