我有 Windows 10,并通过 Outlook COM 对象运行一些 PowerShell 命令。这要求 PowerShell 以与 Outlook 相同的访问级别运行(以管理员或用户身份运行)。
由于我需要 PowerShell 以管理员身份运行其他部分,因此我将 Outlook 也设置为始终以管理员身份运行,没有问题。问题是当我打开 ISE 时,我现在无法访问 Outlook 对象。
似乎没有办法将 ISE 设置为始终以管理员身份运行。缺少“兼容性”选项卡(但 PowerShell 本身没有?),并且注册表项...Windows NT\AppCompatibility
没有任何作用。我会完全禁用 UAC,但当然,在 Windows 10 中,如果不搞砸一堆其他东西,这是不可能的。
有什么想法吗?不,我并不特别想每次都右键单击图标,因为我经常直接打开脚本。
更新:Outlook 抱怨无法以管理员身份进行索引,ISE 无法以管理员身份识别我的网络驱动器,因此两害相权取其轻的办法就是以用户身份运行两者。顺便说一句,“兼容性”选项卡现在也从 PowerShell exe 中消失了,感谢微软……
答案1
答案2
我是在这篇文章发表几个月后才偶然发现这一点的,但我认为我的评论很有帮助。
@Deadly-Bagel 不,该脚本只是一个文件,所以它不会“运行”。
虽然脚本只是一个文件,但它肯定可以包含函数。可以将其中一个函数设置为作为该脚本文件中的第一个进程运行。该函数可用于确定当前会话是否以管理员身份运行。如果不是,它可以自行提升(假设登录用户具有管理员权限)。
function Use-RunAs
{
# Check if script is running as Adminstrator and if not use RunAs
# Use Check Switch to check if admin
param([Switch]$Check)
$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()`
).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
if ($Check) { return $IsAdmin }
if ($MyInvocation.ScriptName -ne "")
{
if (-not $IsAdmin)
{
try
{
$arg = "-file `"$($MyInvocation.ScriptName)`""
Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction 'stop'
}
catch
{
Write-Warning "Error - Failed to restart script with runas"
break
}
exit # Quit this session of powershell
}
}
else
{
Write-Warning "Error - Script must be saved as a .ps1 file first"
break
}
}
Use-RunAs
希望这对您的情况有帮助。如果没有帮助,我很乐意再次访问。
答案3
我假设您是所述 PC 上的管理员,否则您不会要求这样做,您可以完全忽略 UAC 提示并以提升模式运行所有内容,而无需单击“是”或“否”!为此,请按照下列步骤操作:
- 从开始菜单,转到“编辑组策略”
- 转到此路径:计算机配置>>Windows 设置>>安全设置>>本地策略>>安全选项
- 在“策略”下,找到“用户帐户控制:管理员批准模式下管理员的提升提示行为
- 无需提示即可更改设置以提升权限。
就是这样!