【问题标题】:Add IIS AppPool\ASP.NET v4.0 to local windows group将 IIS AppPool\ASP.NET v4.0 添加到本地 windows 组
【发布时间】:2013-08-13 12:18:24
【问题描述】:

我正在尝试使用 PowerShell 编写脚本,将用户 IIS AppPool\ASP.NET v4.0 添加到 Performance Monitor Users 组,以便能够使用来自 ASP.NET 应用程序的自定义性能计数器。但是,我不知道如何使用 ADSI 处理自动创建的 ASP.NET 用户。

这对我有用:

 $computer = $env:COMPUTERNAME;

 $user = [ADSI]"WinNT://$computer/Administrator,user" 
 $groupToAddTo = "TestGroup"

 $parent = [ADSI]"WinNT://$computer/$groupToAddTo,group" 
 $parent.Add($user.Path)

但是,我不知道如何找到 ASP.NET v4.0 用户:

 $computer = $env:COMPUTERNAME;
 # $user = [ADSI]"WinNT://$computer/IIS AppPool/ASP.NET v4.0,user" # <-- Doesn't work

 $groupToAddTo = "TestGroup"

 $parent = [ADSI]"WinNT://$computer/$groupToAddTo,group" 
 $parent.Add($user.Path)

关于如何使用 ADSI 解决该用户的任何线索?或者,使用 Powershell 或其他命令行工具实现我想要的任何其他绝妙方法? GUI 工作正常,但自动化是这里的关键。

【问题讨论】:

  • 它不是 powershell,但可以从命令行执行以下操作:net localgroup "Performance Monitor Users" "IIS AppPool\ASP.NET v4.0" /ADD
  • 当然!非常感谢。我知道这一点,为什么我没有想到呢?我仍然很想知道如何使用纯 ADSI 来做到这一点,但这解决了我目前的问题。
  • 不幸的是,“net localgroup”仅适用于应用程序池名称为 20 个字符或更少的情况。我认为这是因为常规用户名的最大长度为 20 个字符。如果池名称长于该名称,它将显示使用说明并且什么也不做。如果您尝试只提供池名称的前 20 个字符,它将告诉您用户或组不存在。

标签: windows powershell adsi


【解决方案1】:

以下 PowerShell 脚本会将应用程序池“ASP.NET v4.0”添加到组“Performance Monitor Users”中

$group = [ADSI]"WinNT://$Env:ComputerName/Performance Monitor Users,group"
$ntAccount = New-Object System.Security.Principal.NTAccount("IIS APPPOOL\ASP.NET v4.0")
$strSID = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier])
$user = [ADSI]"WinNT://$strSID"
$group.Add($user.Path)

net localgroup 命令不同,此脚本适用于超过 20 个字符的应用程序池名称。

【讨论】:

  • @ErikABrandstadmoen 你能接受这个作为答案吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2013-03-03
相关资源
最近更新 更多