微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell上的Unix命令等效

如何解决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编写的。尽管它不再是最漂亮的代码了​​,它仍然应该可以工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?