gpt4 book ai didi

powershell - 如何从脚本中提升Powershell脚本

转载 作者:行者123 更新时间:2023-12-03 01:28:34 25 4
gpt4 key购买 nike

我是Powershell的新手,但在很多方面都非常喜欢它。由于某些原因,我创建了一个脚本,该脚本从硬盘驱动器上的文件加载一组本地管理员凭据,并创建了PSCredential对象$ MyCred。

我想使用$ MyCred来提升单独的脚本(对打开RDP连接进行一些注册表更改)。我尝试将$ MyCred传递给Start-Process cmdlet:
Start-Process Powershell.exe -Credential $MyCredential
然后,我收到以下错误:

Start-Process : This command cannot be run due to the error: The directory name is invalid.



如果我使用-credential和一个空变量运行启动进程,则会提示我输入用户名和密码。当我输入它们时,我会得到一个提升的Powershell提示,没有任何问题,并且能够对测试系统的注册表进行更改。

我已经验证了$ myCred的内容,并且已正确存储U / N和P / W(例如,与我手动输入的内容相同)。使用像New-PSSEssion
New-PSSession -Credential $MyCredential
返回拒绝访问,我读过的访问在很多系统上也默认禁用。

在理想的情况下,代码如下所示:
Start-Process Powershell.exe -Credential $MyCredential -File C:\MyScript.ps1
这应该启动一个提升的Powershell,该Powershell在第二个脚本中运行一些命令,然后终止。我在这里想念什么?

感谢我能获得的所有帮助,谢谢!我可能是完全显而易见的东西。

背景是,我们有一些我们无法亲自使用的计算机,也无法通过RDP进行访问。我们确实在可以为我们运行脚本的站点上有用户。但重要的是,他们不要获取本地管理员密码。因此,我们想创建一个脚本,该脚本读取一个加密的密码文件,生成本地admin PSCredential对象,并将其传递给一个脚本,该脚本进行必要的注册表更改以允许RDP访问。

最佳答案

关于此主题有很多用例文章。
使用“PowerShell自提升脚本”进行快速网络搜索将显示它们。
即使直接从MS

A self-elevating PowerShell script

# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole))
{
# We are running "as Administrator" - so change the title and background color to indicate this
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
$Host.UI.RawUI.BackgroundColor = "DarkBlue"
clear-host
}
else
{
# We are not running "as Administrator" - so relaunch as administrator

# Create a new process object that starts PowerShell
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;

# Indicate that the process should be elevated
$newProcess.Verb = "runas";

# Start the new process
[System.Diagnostics.Process]::Start($newProcess);

# Exit from the current, unelevated, process
exit
}

# Run your code that needs to be elevated here
Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

关于powershell - 如何从脚本中提升Powershell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com