web-dev-qa-db-ja.com

SC.exeを使用してサービス資格情報のパスワードを設定すると失敗する

この質問は過去に行われたことがありますが、満足のいく回答は得られていません。

SCコマンドを使用して、サービスの資格情報を構成しています。

SC.exe config "SERVICE NAME" obj= "domain\user" password= "password"

これは正常に完了しますが、サービスを開始すると、ログインを実行できません。
[NET START "service name"]

services.mscからパスワードのみを手動で更新すると、サービスを開始すると正常に機能します。

この変更を更新するサーバーは数百台あり、展開の途中で発生するため、手動による介入はオプションではありません。

Configを使用してログインアカウントを更新してから、パスワードの別のconfigコマンドを使用してみました。

すべてのアカウントから、SC.exeはパスワードでは機能せず、Microsoftは何の助けもありません。

アイデア?

11
Grayson

サービスを停止する 変更を加える前、および ユーザーにサービスとしてログオンする権限を付与する の他に、type= ownパラメーターも追加する必要がありました。失敗する:

[SC] ChangeServiceConfig FAILED 87:

The parameter is incorrect

したがって、これは機能したコマンドです。

SC.EXE config "ServiceName" type= own obj= "domain\user" password= "password"

パスワードが二重角かっこで囲まれている場合は、パスワードの特殊文字でも機能します。

7
ericbn

サービスプロパティウィンドウから通常のルートを介して特定のアカウントで実行するようにサービスを構成すると、アカウントにサービスとしてのログイン権が自動的に付与されます。 sc.exeを使用する場合は、ユーザーにサービスとしてのログオン権も付与する必要があります。

サービス権としてログオン

5
Rich K

サービスを再起動する前に、サービスとしてログオンするためのアクセス許可をユーザーに付与する必要があります。残念ながら、デフォルトのWindowsツールを使用してコマンドラインから実行する方法はありませんが、Windows Server 2003リソースキットツールから小さな追加のutilntright.exeを使用できます。

からダウンロード https://www.Microsoft.com/en-us/download/details.aspx?id=17657

インストール後、C:\ Program Files(x86)\ Windows Resource Kits\Tools(または32ビットマシンのProgram Files)に多くのツールがあります。

ntrights.exeが必要です。それをコピーして、別のホストの任意の場所から実行できます。

ユーザーに必要な権限を付与するには、スクリプトに次のものを追加する必要があります。

ntrights.exe +r SeServiceLogonRight -u "%DOMAIN%\%USER%"

その後、新しいユーザーでサービスを正常に再開できます。また、リモートホストでntrights.exeを実行するオプションがあります。

ntrights.exe +r SeServiceLogonRight -u "%DOMAIN%\%USER%" -m %HOSTNAME%

このツールは、多くのホストをリモートで再構成する必要がある場合に非常に役立ちます。

2
Vladimir

私がこれを書いたスクリプトを介してサービスとしてログオンを有効にするには、それをそのまま使用するか、あなたに役立つものを引き出すことができます

https://raw.githubusercontent.com/cdaf/windows/master/automation/provisioning/setServiceLogon.ps1

1
Jules Clements

これを試して。スタートメニュー-引用符なしで「ローカルセキュリティポリシー」と入力します。 「ローカルポリシー」を開き、「ユーザー権利の割り当て」を左クリックします。右側のパネルで、[サービスとしてログオン]を右クリックし、[プロパティ]を選択します。 「ユーザーまたはグループの追加」をクリックして、ユーザーを追加します。 [OK]をクリックします。マシンを再起動する必要があるかもしれません。

追加後、cmdでサービスのユーザー名とパスワードを設定できます。

0
mano

パスワードを設定する前に、サービスを停止してみてください。

sc.exe stop "<my_service>" 4:4:3
sc.exe config "<my_service>" obj= "\.<local_acc_name>" password= "<local_acc_pass>"
sc.exe start "<my_service>"
0
user3452718

この問題が発生しました。元の投稿に対するSTのコメントのおかげで、パスワードの入力方法を調査する必要があることに気付きました。私の場合、パーセント記号を2倍にする必要がありました(%%)パスワードで。

STが提供するリンクは役に立ちます: cmdでの特殊文字のエスケープ

0
Mark Berry

Powershellスクリプトを実行しているときにこの問題に対処します。私の場合の問題は、パスワードの特殊文字でした。

パスワードを二重引用符で囲んだ変数に格納することで、機能するようになりました。

$servicePassword = "`"passwordWithSpecialCharacters`"" cmd /c sc config myService obj= mydomain\myuser password= $servicePassword

特殊文字は次のとおりです。

()'"$><^?

0