ロール ベースのセキュリティを利用する COM+ アプリケーションがいくつかあります。トラブルシューティング中に、各コンポーネントを手動でチェックして、[コンポーネント レベルのアクセス チェックを強制する] ボックスと [選択した項目に明示的に設定されたロール] ボックスの両方がオンになっていることを確認するのは面倒です。
問題の半分は、以下のスクリプト (コンポーネント レベルのアクセス チェックを強制する) で対処されていますが、コンポーネントに割り当てられているロールのチェックボックスも有効になっているかどうかをプログラムで判断する方法を見つけるのに苦労しています。
どんな助けでも大歓迎です!
Clear-Host;
$comAdmin = New-Object -com ("COMAdmin.COMAdminCatalog.1");
$applications = $comAdmin.GetCollection("Applications") ;
$applications.Populate() ;
$appfilter = "ABC";
foreach ($application in $applications){
if($application.name.substring(0,3) -eq $appfilter){
try{
$components = $applications.GetCollection("Components",$application.key)
$components.Populate()
foreach ($component in $components){
$componentName = $component.Name;
Write-Host $componentName;
$accesschecks = $component.Value("ComponentAccessChecksEnabled");
Write-Host "Access Checks Enabled: " -NoNewLine;
Switch ($accesschecks){
$true{Write-Host $accesschecks -ForegroundColor Green}
$false{Write-Host $accesschecks -ForegroundColor red -BackgroundColor white}
}
$roles = $applications.GetCollection("Roles",$application.key) ;
$roles.Populate();
$rolename = $roles.Item(0).Name;
#$roleenabled = !!???!!
Write-Host "Role: $rolename Enabled: " -NoNewLine;
Switch ($roleenabled){
$true{Write-Host $roleenabled -ForegroundColor Green}
$false{Write-Host $roleenabled -ForegroundColor red -BackgroundColor white}
}
Write-Host;
}
}
catch{}
}
Write-Host "-------------------------------------";
}