Cmdからサービスのパスワードを設定したい。私はオプションを得ました
sc.exe config "Service Name" obj = "DOMAIN\User" password = "password"
実行すると、 "[SC] ChangeServiceConfig SUCCESS"が表示され、サービスを開始すると、
"Windowsはローカルコンピューターでservice1サービスを開始できませんでした。エラー1069:ログオンに失敗したため、サービスを開始できませんでした。"
以下のリンクを検索して取得しました SC.exeを使用してサービス資格情報のパスワードを設定すると失敗します
私のパスワードは特殊文字で構成されていません。
それを行うためのオプションは何ですか?
アカウントYourDomain\YourUserにサービスとしてのログオン権が付与されている場合は、PowerShellスクリプトリンクを実行する必要があります AddLogonasaService =そしてこれはあなたのパスワードとは何の関係もありません。ユーザーがサービスを実行することは権利/許可です。
参照用にコードを埋め込んでいます。そのURLも参照できます。
param($accountToAdd)
#written by Ingo Karstein, http://blog.karstein-consulting.com
# v1.0, 01/03/2014
## <--- Configure here
if( [string]::IsNullOrEmpty($accountToAdd) ) {
Write-Host "no account specified"
exit
}
## ---> End of Config
$sidstr = $null
try {
$ntprincipal = new-object System.Security.Principal.NTAccount "$accountToAdd"
$sid = $ntprincipal.Translate([System.Security.Principal.SecurityIdentifier])
$sidstr = $sid.Value.ToString()
} catch {
$sidstr = $null
}
Write-Host "Account: $($accountToAdd)" -ForegroundColor DarkCyan
if( [string]::IsNullOrEmpty($sidstr) ) {
Write-Host "Account not found!" -ForegroundColor Red
exit -1
}
Write-Host "Account SID: $($sidstr)" -ForegroundColor DarkCyan
$tmp = [System.IO.Path]::GetTempFileName()
Write-Host "Export current Local Security Policy" -ForegroundColor DarkCyan
secedit.exe /export /cfg "$($tmp)"
$c = Get-Content -Path $tmp
$currentSetting = ""
foreach($s in $c) {
if( $s -like "SeServiceLogonRight*") {
$x = $s.split("=",[System.StringSplitOptions]::RemoveEmptyEntries)
$currentSetting = $x[1].Trim()
}
}
if( $currentSetting -notlike "*$($sidstr)*" ) {
Write-Host "Modify Setting ""Logon as a Service""" -ForegroundColor DarkCyan
if( [string]::IsNullOrEmpty($currentSetting) ) {
$currentSetting = "*$($sidstr)"
} else {
$currentSetting = "*$($sidstr),$($currentSetting)"
}
Write-Host "$currentSetting"
$outfile = @"
[Unicode]
Unicode=yes
[Version]
signature="`$CHICAGO`$"
Revision=1
[Privilege Rights]
SeServiceLogonRight = $($currentSetting)
"@
$tmp2 = [System.IO.Path]::GetTempFileName()
Write-Host "Import new settings to Local Security Policy" -ForegroundColor DarkCyan
$outfile | Set-Content -Path $tmp2 -Encoding Unicode -Force
#notepad.exe $tmp2
Push-Location (Split-Path $tmp2)
try {
secedit.exe /configure /db "secedit.sdb" /cfg "$($tmp2)" /areas USER_RIGHTS
#write-Host "secedit.exe /configure /db ""secedit.sdb"" /cfg ""$($tmp2)"" /areas USER_RIGHTS "
} finally {
Pop-Location
}
} else {
Write-Host "NO ACTIONS REQUIRED! Account already in ""Logon as a Service""" -ForegroundColor DarkCyan
}
Write-Host "Done." -ForegroundColor DarkCyan
サービスのIDを設定するために、vbscriptを使用しました
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name = 'Servicename'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , ,WScript.Arguments.Item(0), WScript.Arguments.Item(1))
objService.StartService()
Next
ここで、WScript.Arguments.Item(0)はユーザー名argであり、WScript.Arguments.Item(1)はパスワードです。
最初に確認することは、そのユーザーがそのマシンでサービスとしてログオンする権限を持っているかどうかです。もしそうなら(そしてあなたはこれをチェックするために次の手順を行うことができます)、ただサービスに行きます(スタートメニュー-引用符なしで「サービス」と入力します)。リストからサービスを見つけて右クリックします。 「プロパティ」を選択し、「ログオン」タブに移動します。 「パスワード」と「パスワードの確認」を再入力します。 [OK]をクリックします。ユーザーがサービスとしてログオンする権限を持っている場合は、「アカウントYourDomain\YourUserにサービスとしてのログオン権が付与されています」というメッセージが表示されます。 。もう一度サービスを開始してみてください。それでうまくいきます。
ユーザーにこの種の権限がない場合は、次の2つの方法のいずれかを使用できます。
1)スタートメニュー-引用符なしで「ローカルセキュリティポリシー」と入力します。 「ローカルポリシー」を開き、「ユーザー権利の割り当て」を左クリックします。右側のパネルで、[サービスとしてログオン]を右クリックし、[プロパティ]を選択します。 「ユーザーまたはグループの追加」をクリックして、ユーザーを追加します。 [OK]をクリックします。マシンを再起動する必要があるかもしれません。
2)「WindowsServer 2003リソースキットツール」( http://www.Microsoft.com/en-us/download/confirmation.aspx?id=17657 )をダウンロードしてインストールします。コマンドプロンプトを開き、次のように入力します。
ntrights + r SeServiceLogonRight -u MyDomain\MyUser -m \\%COMPUTERNAME%
コンピューターを再起動して、サービスの開始を再試行してください。
ユーザーにサービスとしてログオンする権限が付与されたら、コマンドラインからサービスを作成して開始できます。
おそらく問題は、パスワードを引用符で囲んだくないということです。ユーザー名についても同じことが言えます。
引用符がパスワードの一部であるかどうかはおそらくわかりません。
または、特定のアカウントに「サービスとしてログオン」権限が付与されていないことが原因である可能性があります。
通常、セキュリティイベントログを確認する必要があります。これにより、ログオンに失敗した理由がわかります。
これは私のために働いた:
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>"
つまり、要するに:stopサービスの前にconfigパスワードとstartは正常に機能します。