使用备用凭据进行PowerShell ADSI Provider WinNT查询

时间:2013-12-06 03:11:25

标签: powershell

我想做什么?

嗨!我正在编写一个可以接受2个参数的脚本,ComputerName和CheckWhatFile。然后,该脚本将访问ComputerName指定的计算机(文件服务器),并查找CheckWhatFile的打开文件句柄。

问题是脚本需要由管理用户执行。我们的管理员以非特权帐户登录。我希望它像点击运行脚本一样简单,只是提示输入Get-Credentials框以输入特权帐户。我不能使用Invoke-Command,除非你能找到一种不需要打开远程管理的方法。从使用runas / user:powershell.exe启动的特权PowerShell提示执行时,以下代码有效。

我需要帮助

帮助我找到如何以不同的用户身份从netfile开始执行2行代码。

我的代码是:

param([string]$ComputerName = $null,[string]$CheckWhatFile = $null)
Import-Module ActiveDirectory

$Credentials = Get-Credential #Get Powerful Credentials

$netfile = [ADSI]"WinNT://$ComputerName/LanmanServer"
$netfile.Invoke("Resources") | foreach {
   try
   {
       $Id = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
       $ItemPath = $_.GetType().InvokeMember("Path", 'GetProperty', $null, $_, $null)
       $UserName = $_.GetType().InvokeMember("User", 'GetProperty', $null, $_, $null)
       $LockCount = $_.GetType().InvokeMember("LockCount", 'GetProperty', $null, $_, $null)

       if($ItemPath -eq $CheckWhatFile)
       {
            $Culprit = Get-ADUser -Filter {SamAccountName -eq $UserName} -Credential $Credentials
            Write-Host -ForegroundColor White -NoNewLine "Go Find "
            Write-Host -ForegroundColor Yellow -NoNewLine $Culprit.Name
            Write-Host -ForegroundColor White " and tell them to close the file!"
        }
    }
    catch
    {
    }
 }

备注:

我见过一些以不同用户身份执行ADSI提供程序查询的示例,但它们都与基于LDAP的查询而不是WinNT有关。

2 个答案:

答案 0 :(得分:0)

就目前而言,您能够做到这一点的唯一方法是使用管理员凭据将RDP提供给文件服务器并在那里运行脚本。这是他们获得PowerShell控制台才能看到输出的唯一方法。如果没有启用PowerShell远程处理,您只能获得本地会话,这意味着本地登录或RDP。

答案 1 :(得分:0)

这样的事可能有用:

$provider = "WinNT://$ComputerName/LanmanServer"
$cred     = Get-Credential

$netfile  = New-Object DirectoryServices.DirectoryEntry(
              $provider, $cred.UserName, $cred.GetNetworkCredential().Password
            )
$netfile.Invoke("Resources") | % {
  ...
}