web-dev-qa-db-ja.com

PowerShellを使用してAppPoolを作成してもAppPoolIDは設定されません

PowerShellを使用してIISでアプリケーションプールを作成しようとしています。 Webを検索した後、次のテストスクリプトを作成しました。

Import-Module WebAdministration

$siteName = "TestAppPool"
$userAccountName = "Domain\UserName"
$userAccountPassword = "MyPassword"

if(!(Test-Path ("IIS:\AppPools\" + $siteName)))
{
     $appPool = New-Item ("IIS:\AppPools\" + $siteName)

     #Display Default AppPool Settings
     "AppPool = " + $appPool
     "UserName = " + $appPool.processModel.userName
     "Password = " + $appPool.processModel.password
     "Runtime = " + $appPool.managedRuntimeVersion

     $appPool.processModel.userName = $userAccountName
     $appPool.processModel.password = $userAccountPassword
     $appPool.managedRuntimeVersion = "v4.0"
     $appPool | Set-Item

     #Display Updated AppPool Settings
     "AppPool = " +$appPool
     "UserName = " + $appPool.processModel.userName
     "Password = " + $appPool.processModel.password
     "Runtime = " + $appPool.managedRuntimeVersion
}

スクリプトを実行すると、ユーザー名とパスワードが設定した値に更新されません。

これが2つの印刷ブロックの結果です

#Display Default AppPool Settings
AppPool = Microsoft.IIs.PowerShell.Framework.ConfigurationElement
UserName = 
Password = 
Runtime = v2.0

#Display Updated AppPool Settings
AppPool = Microsoft.IIs.PowerShell.Framework.ConfigurationElement
UserName = 
Password = 
Runtime = v2.0

IISを見ると、アプリケーションプールは.Net Frameworkが更新されていることを示していますが、IDはまだApplicationPoolIdentityに設定されています。 Domain\UserNameである必要があります。

enter image description here

私はマシンの管理者であり、PowerShellを管理者モードで実行しています。これを機能させるために私が欠けているかもしれないものについてのアイデアはありますか?

17

デフォルトのApplicationPoolIdentityの代わりにユーザーアカウントを受け入れるようにプロセスモデルIDタイプを変更する必要があります。これは、次のように実行できます。

Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.identityType -Value 3
Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.username -Value Domain\UserName
Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.password -Value MyPassword

これがお役に立てば幸いです。

25

AppPoolをNetworkServiceに設定する必要があった後、これに遭遇しました。これを行う必要がある他の人のために、appPoolをNetworkService

$pool = get-item("IIS:\AppPools\YOURAPPPOOLNAME");
$pool | Set-ItemProperty -Name "ProcessModel.IdentityType" -Value 2

注:IIS 7.5では、NetworkServiceが値3から値2に切り替えられました。

Process Modelの詳細については、次を参照してください: http://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

6
Flea

上記は私のために働いたことはありません、これはしました:

import-module webadministration
$pool = Get-Item "IIS:\AppPools\apppoolname"
$pool.processmodel.identityType = 3
$pool.processmodel.username  = "username"
$pool.processmodel.password = "password"
$pool | set-item
2
Adriano

私の環境では、これらの答えは私にはうまくいきませんでした。アプリプールのIDとしてMSAを使用しようとしています。コンソールでエラーなしですべてのコマンド(@ musaab-al-okaidiの回答)を実行できましたが、さらに詳しく調べたところ、ユーザー名はアプリプールに関連付けられていませんでした。

applicationHost.configファイルを直接変更して(最初にバックアップを作成してください)、アプリプールの適切なIDを追加することになりました。

知らない人のために、applicationHost.configは次の場所にあります:c:\Windows32\inetsrv\config

applicationHost.configファイル内で、アプリプールエントリを探し、次のように「username」属性を追加します。

<system.applicationHost>
    <applicationPools>
        <add name="someAppPool" autoStart="true" managedRuntimeVersion="4.0" startMode="AlwaysRunning">
            <processModel identityType="SpecificUser" userName="domain\username$" idleTimeout="00:00:00" />
        </add>
    </applicationPools>
</system.applicationHost>

同様の方法でパスワードを設定することもできます(MSAを使用しているため、ここでパスワードを設定する必要はありません。MSAはADで「管理」され、IISボックス)。

また、新しい構成が読み込まれたことを確認するために、IISサーバーを停止/起動しました。

うまくいけば、それが役立つでしょう。

0
Nathan Bills

アイデンティティの設定についても同様の問題がありました。最後に、パスワードが何に設定されているかを確認しました。

Get-ItemProperty $appPool -name "processmodel.password"

そして、パスワードの一部しか見ませんでした。パスワード文字列paramに二重引用符を使用していて、パスワードが「$」で始まっていたため、変数として解析されたことがわかりました。

二重引用符を一重引用符に変更しましたが、機能しました。

0
Popo