2016-11-18 9 views
0

Azure Automation Pull DSCサービスを使用するアカウントがIIS_IUSRSグループ(アプリケーションプールID)のメンバーであることを保証するために、複数のGroupリソースを生成する構成があります。これらのグループリソースは、コンパイル時に提供された$ConfigurationData内のデータをループすることによって生成されます。これはウェブサイトごとに行われます。 - 具体的にはDSCエンジンエラー28とエンジンエラーIは同じ技術および構成を適用することができる2147749939.複数のグループリソースで奇妙な動作を引き起こすプル構成

適用される場合

$Node.WebSites | foreach { 
    $site = $_ 
    $appPoolId = $site.AppPoolId 
    Group appPoolIISUsers 
    { 
     GroupName = "IIS_IUSRS" 
     Credential = $DomainCreds 
     Ensure = "Present" 
     MembersToInclude = $appPoolId 
    } 
} 

は、LCMとWMIサービスが不安定になると、複数のエラーが発生する:例としてStart-DSCConfigurationをPUSHモード(vs Pull)でローカルに使用すると成功します。私はAzureのオートメーションDSCサービスで動作するようにPULL取得することができています唯一の方法は、リストにすべての必要なメンバーを集めて、1つのGroupリソースを使用することです:

$iis_iusrs = ($appPoolIds | select -Unique) 
Group "AppPoolIISUsers" 
{ 
    GroupName = "IIS_IUSRS" 
    Credential = $DomainCreds 
    Ensure = "Present" 
    MembersToInclude = $iis_iusrs 
} 

をこれはバグですか? AzureでのレポートDSCはまた、嫌がらせ者にもなります。 enter image description here

ご意見やご協力をよろしくお願いします。

は、2016年11月21更新:ここで

は、私が生成され、ユニークなgroupname値を使用せずにローカルに適用される設定です。マシン上にはローカルに1つのIIS_IUSRSグループしかなく、複数のものは必要ありません。そこでここではローカルで実行しているときに正常に適用された構成は、(実際の設定だけで簡単にするために、ここで再利用し、Azureのオートメーションからcredsをを引く)である:ここでは

$cd = @{ 
    AllNodes = @(
     @{ 
      NodeName = "*" 
      PSDscAllowPlainTextPassword = $True 
      PSDscAllowDomainUser = $True 

     }, 
     @{ 
      NodeName="localhost" 
      DC = (Get-Credential) 
      AppPoolId = (Get-Credential) 
      WebSites = @(
       @{ 
        Name = "app1" 
        WebsiteName = "app1.contoso.lcl" 
        AppPoolName = "app1.contoso.lcl" 
        DestinationFolder = "D:\Content\app1" 
        IsSecure = $false 
        HostHeaderName = "app1.contoso.lcl" 
        AppPoolIdentity = "App1AppPoolId" 
       }, 
       @{ 
        Name = "app2" 
        WebsiteName = "app2.contoso.lcl" 
        AppPoolName = "app2.contoso.lcl" 
        DestinationFolder = "D:\Content\app2" 
        IsSecure = $false 
        HostHeaderName = "app2.contoso.lcl" 
        AppPoolIdentity = "App2AppPoolId" 
       }, 
       @{ 
        Name = "app3" 
        WebsiteName = "app3.contoso.lcl" 
        AppPoolName = "app3.contoso.lcl" 
        DestinationFolder = "D:\Content\app3" 
        IsSecure = $false 
        HostHeaderName = "app3.contoso.lcl" 
        AppPoolIdentity = "App3AppPoolId" 
       } 
      ) 
     }  
    ) 
} 

Configuration LocalGroupTest 
{ 
    Node $AllNodes.NodeName 
    { 
     $Node.WebSites | foreach { 
      $currentSite = $_ 

      Group "AppPoolIISUsers_AppPool$($currentSite.Name)" 
      { 
       GroupName = "IIS_IUSRS" 
       Credential = $Node.DC 
       Ensure = "Present" 
       MembersToInclude = @(($Node.AppPoolId).UserName) 
      } 
     } 
    } 
} 

Localgrouptest -ConfigurationData $cd -Verbose 

Start-DscConfiguration -Path .\localgrouptest -Verbose -Wait -Force 

は、DSCエンジンからの結果は以下のとおりです。

-a----  11/18/2016 6:26 PM   4496 localhost.mof                                          
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'. 
VERBOSE: An LCM method call arrived from computer WEB01 with user sid S-1-5-21-3606597670-2021226393-1313626409-500. 
VERBOSE: [WEB01]: LCM: [ Start Set  ] 
VERBOSE: [WEB01]: LCM: [ Start Resource ] [[Group]AppPoolIISUsers_AppPoolapp1] 
VERBOSE: [WEB01]: LCM: [ Start Test  ] [[Group]AppPoolIISUsers_AppPoolapp1] 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] A group with the name IIS_IUSRS exists. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] Resolving contoso\rmdeployer in the contoso domain. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] At least one member rmdeployer of the provided MembersToInclude parameter does not have a match in the existing group IIS_IUSRS. 
VERBOSE: [WEB01]: LCM: [ End Test  ] [[Group]AppPoolIISUsers_AppPoolapp1] in 8.1410 seconds. 
VERBOSE: [WEB01]: LCM: [ Start Set  ] [[Group]AppPoolIISUsers_AppPoolapp1] 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] Performing the operation "Set" on target "Group: IIS_IUSRS". 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] Resolving contoso\rmdeployer in the contoso domain. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp1] Group IIS_IUSRS properties updated successfully. 
VERBOSE: [WEB01]: LCM: [ End Set  ] [[Group]AppPoolIISUsers_AppPoolapp1] in 5.9270 seconds. 
VERBOSE: [WEB01]: LCM: [ End Resource ] [[Group]AppPoolIISUsers_AppPoolapp1] 
VERBOSE: [WEB01]: LCM: [ Start Resource ] [[Group]AppPoolIISUsers_AppPoolapp2] 
VERBOSE: [WEB01]: LCM: [ Start Test  ] [[Group]AppPoolIISUsers_AppPoolapp2] 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp2] A group with the name IIS_IUSRS exists. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp2] Resolving CONTOSO in the rmdeployer domain. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp2] Resolving contoso\rmdeployer in the contoso domain. 
VERBOSE: [WEB01]: LCM: [ End Test  ] [[Group]AppPoolIISUsers_AppPoolapp2] in 6.2480 seconds. 
VERBOSE: [WEB01]: LCM: [ Skip Set  ] [[Group]AppPoolIISUsers_AppPoolapp2] 
VERBOSE: [WEB01]: LCM: [ End Resource ] [[Group]AppPoolIISUsers_AppPoolapp2] 
VERBOSE: [WEB01]: LCM: [ Start Resource ] [[Group]AppPoolIISUsers_AppPoolapp3] 
VERBOSE: [WEB01]: LCM: [ Start Test  ] [[Group]AppPoolIISUsers_AppPoolapp3] 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp3] A group with the name IIS_IUSRS exists. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp3] Resolving CONTOSO in the rmdeployer domain. 
VERBOSE: [WEB01]:       [[Group]AppPoolIISUsers_AppPoolapp3] Resolving contoso\rmdeployer in the contoso domain. 
VERBOSE: [WEB01]: LCM: [ End Test  ] [[Group]AppPoolIISUsers_AppPoolapp3] in 6.2440 seconds. 
VERBOSE: [WEB01]: LCM: [ Skip Set  ] [[Group]AppPoolIISUsers_AppPoolapp3] 
VERBOSE: [WEB01]: LCM: [ End Resource ] [[Group]AppPoolIISUsers_AppPoolapp3] 
VERBOSE: [WEB01]: LCM: [ End Set  ] 
VERBOSE: [WEB01]: LCM: [ End Set  ] in 26.6100 seconds. 
VERBOSE: Operation 'Invoke CimMethod' complete. 
VERBOSE: Time taken for configuration job to complete is 26.923 seconds 

答えて

0

Azure Automation DSCにかかわらず、これは有効なDSC構成ではないようです。 $Node.WebSitesに複数のWebサイトオブジェクトがある場合は、同じリソース名とキー(GroupName)を持つ複数のGroupリソースになりますが、値は異なります。これはDSCでは許可されていません。この実行

$Node = @{ 
    WebSites = @(@{AppPoolId="somePoolID1"}, @{AppPoolId="somePoolID2"}) 
} 

Configuration abc { 
    $Node.WebSites | foreach { 
     $site = $_ 
     $appPoolId = $site.AppPoolId 
     Group appPoolIISUsers 
     { 
      GroupName = "IIS_IUSRS" 
      Credential = $DomainCreds 
      Ensure = "Present" 
      MembersToInclude = $appPoolId 
     } 
    } 
} 

abc 

は、これらのエラーを生成します:

PsDesiredStateConfiguration\Group : A duplicate resource identifier '[Group]appPoolIISUsers' was found while processing the 
specification for node ''. Change the name of this resource so that it is unique within the node specification. 
At line:9 char:8 
+  Group appPoolIISUsers 
+  ~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Write-Error], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : DuplicateResourceIdInNodeStatement,PsDesiredStateConfiguration\Group 

Test-ConflictingResources : A conflict was detected between resources '[Group]appPoolIISUsers (::9::8::Group)' and 
'[Group]appPoolIISUsers (::9::8::Group)' in node 'localhost'. Resources have identical key properties but there are differences 
in the following non-key properties: 'MembersToInclude'. Values 'somePoolID1' don't match values 'somePoolID2'. Please update 
these property values so that they are identical in both cases. 
At line:246 char:9 
+   Test-ConflictingResources $keywordName $canonicalizedValue $k ... 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Write-Error], InvalidOperationException 
    + FullyQualifiedErrorId : ConflictingDuplicateResource,Test-ConflictingResources 

Errors occurred while processing configuration 'abc'. 
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:3588 char:5 
+  throw $ErrorRecord 
+  ~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (abc:String) [], InvalidOperationException 
    + FullyQualifiedErrorId : FailToProcessConfiguration 

あなたはこれを試してみて、それが動作するかどうかを確認することはできますか?あなたが生成され、ユニークなグループ名の値を使用せずにローカルに適用設定が機能し

唯一の理由でも、ためである:更新された質問に基づいて

$Node.WebSites | foreach { 
     $site = $_ 
     $appPoolId = $site.AppPoolId 
     Group ("appPoolIISUsers" + $appPoolId) 
     { 
      GroupName = ("IIS_IUSRS" + $appPoolId) 
      Credential = $DomainCreds 
      Ensure = "Present" 
      MembersToInclude = $appPoolId 
     } 
    } 

更新:これは、各グループリソースの名前とキーユニークになりますリソースインスタンス間で同じリソースキー(GroupName = IIS_IUSRS)を再利用しても、各グループが同じであることを宣言する希望の状態はまったく同じです.3つのリソースすべてが同じグループをまったく同じ状態に設定します。あなたが見ることができるように、彼らは同じグループにAppPoolIISUsers_AppPoolapp1とまったく同じ状態に設定するので、すべてのAppPoolIISUsers_AppPoolapp2またはAppPoolIISUsers_AppPoolapp3リソースインスタンスの必要は、ありません

Configuration LocalGroupTest 
{ 
    Node $AllNodes.NodeName 
    { 
     Group "AppPoolIISUsers_AppPoolapp1" 
     { 
      GroupName = "IIS_IUSRS" 
      Credential = $Node.DC 
      Ensure = "Present" 
      MembersToInclude = @(($Node.AppPoolId).UserName) 
     } 

     Group "AppPoolIISUsers_AppPoolapp2" 
     { 
      GroupName = "IIS_IUSRS" 
      Credential = $Node.DC 
      Ensure = "Present" 
      MembersToInclude = @(($Node.AppPoolId).UserName) 
     } 

     Group "AppPoolIISUsers_AppPoolapp3" 
     { 
      GroupName = "IIS_IUSRS" 
      Credential = $Node.DC 
      Ensure = "Present" 
      MembersToInclude = @(($Node.AppPoolId).UserName) 
     } 
    } 
} 

からIIS_IUSRS:あなたの構成は、これを行うと同じです。

あなたは、このサンプルでは、​​あなたが宣言しようとしている最終状態を宣言してよろしいですか?私はまだあなたが打つ問題を打つ理由は、あなたの設定で同じリソースインスタンス名やリソースインスタンスキー(GroupName)を再利用しようとしているが、他のリソースインスタンスフィールド(たとえば、MembersToInclude)。同じリソースインスタンス(この例ではGroup)は複数の状態になることができないため、これはDSCによって許可されていません。これは1つの状態に限定することができます。

+0

まあ、これは控えめに言って面白いです...私は一意の名前グループリソースが、それでも同じグループ名(IIS_IUSRS - のみ1グループのtheres以降)を変更することをプッシュして、働いていた私のテストDSCを掲示しています。 ..上記の私の改訂されたポストを参照してください。 –

+0

Azure Automation DSCを使用しているマシンで、ローカルに、そしてPowerShell/DSCのどのバージョンをお使いですか?古いバージョンのDSCエンジンで重複したキーが許可されていても最新のものではない可能性があります。 – Joe

+0

私のWin10 Proワークステーションには、PSVersion 5.1.14393.206(WSManStackVersion 3.0)があります。マシン上で上記のプッシュ設定をテストしました(Azure Automationから取得しています)、Server2012R2 PSVersion 5.0.10586.117 –

関連する問題