2013-12-11 3 views
1

Мне нужно проверить, что базовая учетная запись на стороне сервера, использующая мою службу WCF, имеет правильные разрешения ACL для разных точек локальной файловой системы. Если я смогу получить базовую идентификационную информацию Windows, я могу ее оттуда оттуда. Это сбрасывается в более крупный сценарий Powershell, используемый после развертывания.Получить идентификатор Windows AppPool, на котором запущена служба WCF

Ниже приведен мой фрагмент powershell, который получает ApplicationPoolSid, ​​как вы сопоставляете это с AppPool Windows Identity?

$mywcfsrv = Get-Item IIS:\AppPools\<MyWCFServiceName>; 

Обновлено ниже, чтобы включить сниппет Кейта

Для полноты, вот решение:

Function Get-WebAppPoolAccount 
{ 
param ([Parameter(Mandatory = $true, Position = 0)] 
     [string] 
     $AppPoolName) 

     # Make sure WebAdmin module is loaded. 
     $module = (Get-Module -ListAvailable) | ForEach-Object { if ($_.Name -like 'WebAdministration') { $_ } }; 
     if ($module -eq $null) 
     { 
      throw "WebAdministration PSSnapin module is not available. This module is required in order to interact with WCF Services."; 
     } 

     Import-Module $module; 

     # Get the service account. 
     try 
     { 
      $mywcfsrv = Get-Item (Join-Path "IIS:\AppPools" $AppPoolName); 
     } 
     catch [System.Exception] 
     { 
      throw "Unable to locate $AppPoolName in IIS. Verify it is installed and running."; 
     } 

     $accountType = $mywcfsrv.processModel.identityType; 

     $account = $null; 


     if ($accountType -eq 'LocalSystem') 
     { 
      $account = 'NT AUTHORITY\SYSTEM'; 
     } 
     elseif ($accountType -eq 'LocalService') 
     { 
      $account = 'NT AUTHORITY\LOCAL SERVICE'; 
     } 
     elseif ($accountType -eq 'NetworkService') 
     { 
      $account = 'NT AUTHORITY\NETWORK SERVICE'; 
     } 
     elseif ($accountType -eq 'SpecificUser') 
     { 
      $account = $mywcfsrv.processModel.userName; 
     } 

     return $account; 
} 

ответ

1

Как так:

$mywcfsrv = Get-Item IIS:\AppPools\<MyWCFServiceName> 
$mywcfsrv.processModel.identityType 
+0

Кит, это возвращает 'IIS AppPool \ '. Когда я проверяю IIS вручную, это должно быть «NETWORKSERVICE». Я что-то упускаю? – bartonm

+0

Я обновил свой ответ. Он находится под ' .processModel.identityType'. –

 Смежные вопросы

  • Нет связанных вопросов^_^