use*_*867 5 powershell active-directory
首先,我为发布另一个有关 PowerShell 和选项卡完成的问题表示歉意。StackOverflow 系统识别了几个很好的问题并提供了与这个主题相关的答案,但它们似乎都太麻烦了,无法在这个简单的New-ADComputer
脚本中实现。
参数将进入 aSplat
以保持脚本可读。以下代码在 ISE 中正确制表符补全,但必须用双引号引起来。
PowerShell 中是否有任何本机方法允许对包含空格的参数集进行制表符补全?
Param(
[Parameter(Mandatory=$true)]
[string]$Server,
[Parameter(Mandatory=$true)]
[ValidateSet('Env1','Env 2','Env 3')]
[string]$Environment,
[Parameter(Mandatory=$true)]
[ValidateSet('Application','Database','File and Print','Web Server')]
[string]$Type
)
$NewADitems = @{
Name = $server
Path = "OU=$Type,OU=$Environment,OU=Smaller DN string"
Location ='MySite'
Description = "Test Description"
ManagedBy = "Huge Distingushed Name string"
WhatIf = $true
}
Write-Host @NewADitems
Run Code Online (Sandbox Code Playgroud)
使用的命令和收到的错误:
PS C:\Scripts> .\ADComputer-ParamTest.ps1 -Server ThisTest -Environment Env 3 -Type File and Print
C:\Scripts\ADComputer-ParamTest.ps1 : Cannot validate argument on parameter
'Environment'. The argument "Env" does not belong to the set "Env1,Env 2,Env3"
specified by the ValidateSet attribute. Supply an argument that is in the
set and then try the command again.At line:1 char:58
+ .\ADComputer-ParamTest.ps1 -Server ThisTest -Environment Env 3 -Type File and Pr ...
+ ~~~
Run Code Online (Sandbox Code Playgroud)
编辑:更多信息。如果在我的示例脚本中省略参数的单/双引号Environment
,制表符补全将不适用于最终参数Type
。将第二组括在引号中可以纠正此问题,但这是监视此行为的一种方法。
不,至少要到 2015 年 4 月的 Powershell 5.0 预览版。制表符补全按照您的描述工作。它仍然需要围绕集合的引号才能实际工作而不会引发错误。就其价值而言,当您使用引号启动制表符补全时,它确实会添加匹配类型的结束引号。例如,按“f 然后按 Tab”将完成“文件和打印”(不确定何时将其添加为功能)。
我尝试寻找自动包含引号作为 ValidateSet 一部分的方法,包括在参数集周围添加额外的双引号以及其他转义引号的尝试。所有尝试都导致制表符补全无法以各种方式工作。
一些尝试,以防有人可能尝试该途径:
[ValidateSet('Env1','"Env 2"','"Env 3"')]
[ValidateSet('Env1',"'Env 2'","'Env 3'")]
[ValidateSet('Env1','`"Env 2`"',"`'Env 3`'")]
[ValidateSet('Env1','\"Env 2\"',"\'Env 3\'")]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1691 次 |
最近记录: |