我想做什么?
嗨!我正在编写一个可以接受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有关。
答案 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") | % {
...
}