用于检查管理员权限的代码在某些服务器上不起作用
Code to check for Administrator privileges not working on some servers
我写的一个小脚本中有一行代码在执行之前检查 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 的服务器或计算机上运行良好,只是偶尔会有客户遇到脚本问题。
您的代码中似乎有一些奇怪的引号,就在 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
}
旧版本的 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 引号。
我写的一个小脚本中有一行代码在执行之前检查 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 的服务器或计算机上运行良好,只是偶尔会有客户遇到脚本问题。
您的代码中似乎有一些奇怪的引号,就在 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
}
旧版本的 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 引号。