Dav*_*ett 4 windows powershell
我需要能够使用 PowerShell 脚本管理我的环境。我需要定期更改我的主机文件。但是,每当我尝试从脚本编辑主机时,都会出现以下错误:
Access to the path C:\windows\system32\drivers\etc\hosts is denied
Run Code Online (Sandbox Code Playgroud)
目前我的脚本如下所示:
Function ManageHosts([string] $environment)
{
cd C:\windows\system32\drivers\etc
if($environment.StartsWith("p"))
{
get-content .\hosts.prod | set-content .\hosts -force
}
else
{
get-content .\hosts.dev | set-content .\hosts -force
}
}
Run Code Online (Sandbox Code Playgroud)
这是特权问题。如果您是本地盒子的管理员,我可以提供帮助。
试试这个:右键单击您的 Powershell 图标并选择Run As Administrator。然后尝试运行您的脚本;它会起作用。
但是,这并没有回答您如何从脚本中执行此操作。您可以将一些代码添加到您的脚本中,这些代码将自动尝试提升您的 PS 会话,但您仍然需要与出现的安全对话框进行交互,该对话框在您尝试以管理员身份运行 Vista 或更高版本时出现。因此,不确定这比以管理员身份开始会话容易得多,但将其添加到脚本的开头:
$WindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$WindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($WindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if ($WindowsPrincipal.IsInRole($adminRole))
{
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
}
else
{
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
$newProcess.Verb = "runas";
[System.Diagnostics.Process]::Start($newProcess);
exit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3248 次 |
| 最近记录: |