如何在Cygwin中执行Windows的runas命令?

5
如果我尝试在Cygwin内部使用Windows runas命令,输入密码行会打印到标准输出,但它不会等待我在System.in中输入密码。有没有办法解决这个问题?

1
你不能以管理员身份运行Cygwin shell吗? - devnull
我不需要以管理员身份执行Windows shell,我需要以特定帐户的身份执行,该帐户具有不同于我的特权。 - James Robinson
那么,你不能以特定的帐户身份运行Cygwin shell吗? - anishsane
cygstart --action=runas 能工作吗? - Yaakov
我应该如何使用cygstart --action=runas传递特定用户? 真的没有解决方案吗? 我需要在以不同(特定)用户执行的现有Cygwin shell中启动脚本。 - realtime
"Runas命令可能无法理解Cygwin的pty。" - ManuelAtWork
2个回答

4

我想可以使用两个嵌套的命令提示符窗口来运行一个修改密码的脚本。

cygstart cmd /c "runas /user:DOMAIN\\USER \"powershell %cd%\\changepw.ps1\" & pause"

下面是changepw.ps1脚本的内容:
# http://serverfault.com/questions/570476/how-can-a-standard-windows-user-change-their-password-from-the-command-line
# cygstart cmd /c "runas /user:DOMAIN\\USER \"powershell %cd%\\changepw.ps1\" & pause"

param (
    [string]$oldPassword = $( Read-Host "Old password"),
    [string]$newPassword = $( Read-Host "New password")
)

$ADSystemInfo = New-Object -ComObject ADSystemInfo
$type = $ADSystemInfo.GetType()
$user = [ADSI] "LDAP://$($type.InvokeMember('UserName', 'GetProperty', $null, $ADSystemInfo, $null))"
try {
    $user.ChangePassword($oldPassword, $newPassword)
} catch [Exception] {
    # echo $_.Exception.GetType().FullName, $_.Exception.Message
    echo $_.Exception | format-list -force
}
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)

1

不需要启动"Cygwin终端",你可以启动"Cygwin控制台"。你可以通过执行以下命令来实现:

c:\cygwin\bin\bash.exe --Login

然后,您应该能够运行像runas这样的本地Windows命令。

(但是,您会失去一些POSIX兼容性,因为shell将在Windows控制台窗口中运行,而不是在MinTTY终端内部。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接