试图更好地理解动态参数,但有些事情一直困扰着我。我在外部网络(互联网)上找到的所有示例,参数属性总是被定义/包含的。
这是我正在处理的内容:
Function Test-DynamicParameters {
[cmdletbinding()]
Param (
[System.IO.DirectoryInfo]$Path
)
DynamicParam
{
if ($Path.Extension) {
$parameterAttribute = [System.Management.Automation.ParameterAttribute]@{
Mandatory = $false
}
$attributeCollection = [System.Collections.ObjectModel.Collection[System.Attribute]]::new()
$attributeCollection.Add($parameterAttribute)
$dynParam1 = [System.Management.Automation.RuntimeDefinedParameter]::new(
'TestSwitch', [switch], $attributeCollection
)
$paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
$paramDictionary.Add('TestSwitch', $dynParam1)
$paramDictionary
}
}
Begin { }
Process
{
$PSBoundParameters
}
End { }
}
Run Code Online (Sandbox Code Playgroud)
。。目前已经尝试了多种删除某些行/代码的组合,以查看什么会使我的动态参数显示,但如果没有声明属性,则任何操作都不起作用。有这个必要吗?
问题:要使其正常工作,动态参数声明的最简单形式是什么?
例如 - 它可以缩短为我只定义名称吗?或者,PowerShell 会坚持指定类型而不是默认类型吗[object]?就像是:
$paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
$paramDictionary.Add('TestSwitch')
$paramDictionary
Run Code Online (Sandbox Code Playgroud) 大家早上好!
自从我在我发表的另一篇文章中发现它以来,我一直在搞乱 switch 语句。
我在下面的代码中有这个问题,它用相同的信息打印多行,我明白为什么这样做,但是,我不知道如何解决它。我相信它在我分配变量时搞砸了,但我不太确定。有人可以为我指出可能导致问题的正确方向吗?任何帮助表示赞赏。
$gc = Get-ChildItem -Path 'C:\users\abrah\OneDrive\Desktop'
Foreach ($File in $gc) {
switch -Wildcard ($file) {
"deskt*" { $Desk = "This is the location: $($File.FullName)" }
"*v*" { $VA = "This is the location: $($File.FullName)" }
}
$VCount = $va | Measure-Object | Select-Object -ExpandProperty Count
$Dcount = $Desk | Measure-Object | Select-Object -ExpandProperty Count
$PS = [pscustomobject]@{
DesktopLocation = $Desk
DCount = $Dcount
VLocation = $VA
VCount = $VCount
}
$PS
}
Run Code Online (Sandbox Code Playgroud)
关于脚本:我只是想在我的桌面上找到任何以 开头的文件deskt,以及任何以字母开头的文件 …
可能是一个愚蠢的问题,但我只是好奇。
为该类下的应用程序调用卸载时Get-CIMInstance和调用卸载时有区别吗?我问的唯一原因是:Get-WMIObjectWin32_Product
Get-CIMInstance卸载应用程序时,将使用某些程序重新启动我的计算机。Get-WMIObject卸载应用程序无需重新启动即可运行。另外,将 a 管道连接Get-Member到任何Get-CIMInstance产品,并没有给我卸载的方法,但它确实使用Get-WMIObject. 开发者就是这么写的吗?虽然,Invoke-CIMMethod -Name Uninstall仍然有效。
Get-CIMInstance这是我使用/卸载多个应用程序时所做的操作Invoke-CIMMethod -Name Uninstall:
Get-CimInstance -ClassName win32_product | Where-Object Name -Match "Visual" |
ForEach-Object -Process {
Invoke-CimMethod -InputObject $_ -Name Uninstall
}
#Methods Returned
<#
Get-CimInstance -ClassName win32_product | Where-Object Name -Match "Visual" | Get-Member -MemberType Method
TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_Product
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object ICloneable.Clone()
Dispose …Run Code Online (Sandbox Code Playgroud)