在命名的 PowerShell 参数中提供示例

Providing example in named PowerShell parameter

使用这样的代码:

param
(   
    [Parameter(Mandatory = $true)] 
    [string]$TenantId,

    [Parameter(Mandatory = $true)] 
    [System.Uri]$HostUrl,
         
    [Parameter(Mandatory = $true)] 
    [string]$SiteId,
         
    [Parameter(Mandatory = $true)] 
    [guid]$WebId,
         
    [Parameter(Mandatory = $true)] 
    [guid]$ListId,
         
    [Parameter(Mandatory = $true)] 
    [guid]$UniqueId,    
         
    [Parameter(Mandatory = $true)] 
    [string]$OutFile
)

Connect-MgGraph -Scopes "Sites.FullControl.All" -TenantId $TenantId -ForceRefresh

Get-MgSiteListItemDriveItemContent -ListId $ListId -ListItemId $UniqueId -SiteId "$($HostUrl.DnsSafeHost),$SiteId,$WebId" -OutFile $OutFile

Disconnect-MgGraph

我希望最终用户知道如何获取所有必需的命名参数,例如执行此脚本后,我预计会发生这样的事情

cmdlet  at command pipeline position 1
Supply values for the following parameters:
TenantId (to get TenantID go to Admin Center - Settings and copy TenantID): xxx
HostUrl (to get HostUrl copy HostUrl from the log files): yyy-yyy 
SiteId (SiteId can be obtained directly in SharePoint site): zzz-zzz-zzz

等等

我知道有一个 HelpMessage 参数,例如

[Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage="Site name")]

但我希望在最终用户指定值时显示此消息。

你能澄清一下你在追求什么吗? “但我希望在最终用户指定值时显示此消息。”你想让它显示为 Question/Answer 而 运行 吗?如果是这样,您不想将其设置为强制参数,您想要 Read-Host 变量。

例如:

      $TenantId = Read-Host "TenantId (to get TenantID go to Admin Center - Settings and Copy TenantID)"
      
      if ($null -eq $TenantId) {
            Write-Output "Invalid TenantId supplied, unable to continue."
            return
      }

然后您将为所有变量执行此操作,并在提供它们后采取行动。

编辑: 使用 zjg.robin 指定的答案,而 运行 是强制参数,用户可以输入 !?获取强制参数的帮助消息。如果您希望它们被提示,那么您将希望使用 Question/Answer 方法,而不是带有必需参数的 cmdlet。或者,您可以为它提供两个世界,并使其成为函数内的真正 cmdlet。然后当你调用脚本时,如果没有指定参数,你会提示他们输入这些参数并将其传递给函数。真的取决于您的具体要求。