在命名的 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。然后当你调用脚本时,如果没有指定参数,你会提示他们输入这些参数并将其传递给函数。真的取决于您的具体要求。
使用这样的代码:
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。然后当你调用脚本时,如果没有指定参数,你会提示他们输入这些参数并将其传递给函数。真的取决于您的具体要求。