Powershell上的Unix命令等效

问题描述

Unix命令示例,powershell上的等效命令是什么?

if [ "$UID" -ne 0 ]
  then echo "Please run as root"
  exit
fi

解决方法

如果您在Linux上运行Powershell,则可以编写如下内容:

 if ((id -u) -ne 0) {
     write-host "Please run as root"
     exit
 }

如果在Windows上使用Powershell,请使用语句requires。这样,仅当用户是管理员时,脚本才会运行。示例:

#Requires -RunAsAdministrator

write-host "This is an administrator"
,

您说您想要一个等效的Unix命令,但您的问题尚不清楚您需要在哪个平台上使用该等效命令。如果您需要Windows答案,那就非常接近了:

$windowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$windowsSecurityPrincipal = [System.Security.Principal.WindowsPrincipal]::new($windowsID)
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator

if ( -not $windowsSecurityPrincipal.IsInRole($adminRole)) {
    Write-Host "Please run as an administrator."
    exit
}

过去,我有一些像这样的自提升脚本:

# ##########################################
# Determine if we have Administrator rights
Write-Host 'Checking user permissions... '
$windowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$windowsSecurityPrincipal = New-Object System.Security.Principal.WindowsPrincipal($windowsID)
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator

If (!($windowsSecurityPrincipal.IsInRole($adminRole))) {
    Write-Warning 'Current user does not have Administrator rights'
    Write-Host 'Attempting to copy files to temporary location and restarting script'

    # Get random file name
    Do {
        $temp = [System.IO.Path]::GetTempPath() + [System.IO.Path]::GetRandomFileName()
    } Until (!(Test-Path -LiteralPath "$temp"))

    # Create directory
    Write-Host 'Creating temp directory... ' -NoNewLine
    New-Item -Path "$temp" -ItemType 'Directory' | Out-Null
    Write-Host 'done.'

    # Copy script to directory
    Write-Host 'Copying script to temp directory... ' -NoNewLine
    Copy-Item -LiteralPath "$($myInvocation.MyCommand.Path)" "$temp" | Out-Null
    Write-Host 'done.'
    $newScript = "$($temp)\$($myInvocation.MyCommand.Name)"
    
    # Start new script elevated
    Write-Host 'Starting script as administrator... ' -NoNewLine
    $adminProcess = New-Object System.Diagnostics.ProcessStartInfo
    $adminProcess.Filename = ([System.Diagnostics.Process]::GetCurrentProcess()).Path
    $adminProcess.Arguments = " -File `"$newScript`""
    $adminProcess.Verb = 'runas'
    
    Try {
        [System.Diagnostics.Process]::Start($adminProcess) | Out-Null
    }
    Catch {
        Write-Error 'Could not start process'
        Exit 1
    }
    Write-Host 'done.'
    
    Exit 0
} 

# Begin script code here

该代码已经很旧了。我想我是为Powershell 2或3编写的。尽管它不再是最漂亮的代码了​​,它仍然应该可以工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...