Мне нужно проверить, что базовая учетная запись на стороне сервера, использующая мою службу 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;
}
Кит, это возвращает 'IIS AppPool \ '. Когда я проверяю IIS вручную, это должно быть «NETWORKSERVICE». Я что-то упускаю? –
bartonm
Я обновил свой ответ. Он находится под ' .processModel.identityType'. –