小编Abr*_*ala的帖子

动态参数的最简单形式是什么?

试图更好地理解动态参数,但有些事情一直困扰着我。我在外部网络(互联网)上找到的所有示例,参数属性总是被定义/包含的。

这是我正在处理的内容:

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)

powershell powershell-5.1

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

在 switch 语句中分配变量

大家早上好!

自从我在我发表的另一篇文章中发现它以来,我一直在搞乱 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,以及任何以字母开头的文件 …

powershell

2
推荐指数
1
解决办法
121
查看次数

Get-WMIObject 卸载与 Get-CIMInstance 卸载

可能是一个愚蠢的问题,但我只是好奇。

为该类下的应用程序调用卸载时Get-CIMInstance和调用卸载时有区别吗?我问的唯一原因是:Get-WMIObjectWin32_Product

  • 使用Get-CIMInstance卸载应用程序时,将使用某些程序重新启动我的计算机。
  • 用于Get-WMIObject卸载应用程序无需重新启动即可运行。

另外,将 a 管道连接Get-Member到任何Get-CIMInstance产品,并没有给我卸载的方法,但它确实使用Get-WMIObject. 开发者就是这么写的吗?虽然,Invoke-CIMMethod -Name Uninstall仍然有效。

获取 CIMInstance/卸载

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)

powershell wmi cim powershell-5.1

2
推荐指数
1
解决办法
6055
查看次数

标签 统计

powershell ×3

powershell-5.1 ×2

cim ×1

wmi ×1