如何使用提升的权限运行Powershell脚本块

时间:2016-07-11 14:24:25

标签: sql-server-2012 powershell-v2.0 sql-server-agent

我正在编写PowerShell脚本以将压缩的C2审核文件存档到文件共享。我可能遇到的最后一个问题是给.Net压缩例程赋予操作文件的特权。在开发过程中,我可以标榜我的帐户管理员角色,以便将完全访问权限传播到DATA目录中的文件。但是,该脚本是从代理作业中的PowerShell步骤运行的,我也希望自动执行ACL更改。

对于增加的难度级别,我在SQL Server 2012下执行此操作,因此我无法使用PowerShell 2.0。我通过一个使用临时配置文件加载$ RunActivationConfigPath的过程来使用.Net 4.5压缩例程。但是,我无法找到改变该配置文件以提升管理员角色的方法。

这是Benjamin Armstrong编写的一段脚本,用于检查连接是否使用管理员权限。

# Get the ID and security principal of the current user account
$runtimeWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$runtimeWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($runtimeWindowsID);
# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;

Write-Output ("Running under "+$runtimeWindowsID.Name)
Write-Output ("PS Version "+$PSVersionTable.PSVersion.Major)

# Check to see if we are currently running as an administrator
if ($runtimeWindowsPrincipal.IsInRole($adminRole) -eq $true) {
  Write-Output "We are strong."
} else {
  Write-Output "We are not strong."
}

将脚本作为代理作业步骤运行会产生:

  

在NT Service \ SQLSERVERAGENT下运行
  PS版本2
  我们并不强大。

在管理员模式下从sqlps运行脚本会产生:

  

在DOMAIN \ myusername下运行
  PS版本2
  我们很坚强。

我提到的提升脚本的所有方法都涉及使用脚本文件。例如,创建一个新进程并使用RunAs作为Verb执行它。我想避免脚本文件,并在步骤中包含所有内容。我喜欢需要SSMS权限才能查看代码的附加安全性(无论多么小)。

所以,这是我的问题:

1)有没有办法提升脚本块中的命令

2)是否有办法在管理员模式下运行代理作业中的PowerShell步骤?

额外的信用问题:

3)如果我确实需要将代理服务帐户添加到Windows用户组,那么二十几个组中的哪一个会为该帐户提供更改文件的ACL所需的最小权限,然后最终将其删除?

0 个答案:

没有答案