用于检查某些服务器上不能使用的管理员权限的代码

时间:2017-10-30 10:26:20

标签: powershell administrator administrative

我在我编写的一个小脚本中有一行代码,用于检查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
}

当某些客户运行脚本时,他们会收到以下错误,我不确定原因。有人可以向我解释一下吗?

Error message in PowerShell screenshot link

编辑:要明确的是,脚本在安装了PowerShell的大多数服务器或计算机上都能正常工作,但只有一次,客户才会遇到脚本问题。

2 个答案:

答案 0 :(得分:0)

似乎代码中有一些奇怪的引号,就在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
}

答案 1 :(得分: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引号。