2

我在编写的一个小脚本中有一行代码,用于在执行之前检查 Powershell 是否具有管理权限。带有以下管理检查的代码段:

If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` [Security.Principal.WindowsBuiltInRole] “Administrator”))
{
 Write-Warning “You do not have Administrator rights to run this script.`nPlease re-run this script as an Administrator.”
 Break
}

当某些客户运行脚本时,他们会收到以下错误,我不知道为什么。有人可以向我解释一下吗?

PowerShell 屏幕截图链接中的错误消息

编辑:需要明确的是,该脚本在大多数安装了 PowerShell 的服务器或计算机上都可以正常工作,客户只会偶尔遇到脚本问题。

4

2 回答 2

1

您的代码中似乎有一些奇怪的引号,就在之后IsInRole(,使用这个每次都有效的代码:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Warning "You do not have Administrator rights to run this script.`nPlease re-run this script as an Administrator."
    Break
}
于 2017-10-30T10:30:15.107 回答
0

旧版本的 PowerShell 似乎不喜欢IsInRole(`. 这通常用于指示代码语句继续到下一行,但在这里它用于行的中间。

较新版本的 PowerShell 似乎可以容忍代码中间的反引号,但似乎旧版本坚持它是行中的最后一个字符。

如果你在下面直接放置一个换行符`(或者如果你只是删除它),它应该可以在旧的 PowerShell 中工作。

If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator"))
{
 Write-Warning "You do not have Administrator rights to run this script.`nPlease re-run 
this script as an Administrator."
 Break
}

为了以防万一,我还将您的大引号更改为 ASCII 引号。

于 2020-08-21T12:11:33.927 回答