会社セキュリティポリシーの調整により、機械師 mini
は最終的に自宅へ移転し、予備サーバーとして利用。同時にマシンシステムを再インストールし、ubuntu
がwindows server
に切り替えられました。アクティベーション手段が不正であったため、自宅で使用しても問題ないように見えていましたが、実際にはアクティベーションができていないと様子がおかしくなりました。
Microsoftによる検出がトリガーされ、通常稼働していたサーバーが起動から1時間で自動シャットダウン。システムログを徹底的に調査した結果、盗版であることに至りました。
仕方なく再度システムを再インストールし、SqlServer
も再インストールする必要が生じました。毎回トラブルシューティングを行うと非常に面倒であり、ファイル権限管理が厳格であるため、データベースの追加が正常に行えませんでした。
エラーメッセージ
システムを再インストールした後、SqlServer
がデータベースに接続しようとすると、オペレーティングシステムのアクセス拒否エラー5120が発生することがあります。
処理スクリプト
前文リンク:ローカルGitリポジトリの一括更新、やはりこの馴染み深いスクリプトだ。改造して、フォルダをトラバースしながらファイルの権限を変更し、現在のユーザーに完全な編集権限を与えるようにする。
ネット上のチュートリアルはほとんどが手動で修正する方法を示しており、毎回数個のファイルだけ修正するのだろうか? 私は毎回多数のファイルを処理する必要があり、すべてを手作業で処理すると、精神的に疲れてしまう。
$currentUserName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$rootDirectory = "D:\data\2013_RujiaInfo"
Get-ChildItem -Path $rootDirectory -Recurse | ForEach-Object {
$itemPath = $_.FullName
if ($_ -is [System.IO.DirectoryInfo]) {
$icaclsResult = icacls $itemPath /setowner "$currentUserName" 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "フォルダ $itemPath の所有者を $currentUserName に変更しました"
# 現在のユーザーに書き込み権限を付与
Invoke-Expression "icacls `"$itemPath`" /grant `"$($currentUserName):(OI)(CI)F`""
Write-Host "$currentUserName がフォルダを編集するための権限が付与されました"
} else {
Write-Host "フォルダ $itemPath の所有者を変更できません。エラー情報: $icaclsResult"
}
} else {
$takeownResult = icacls $itemPath /setowner "$currentUserName" 2>&1
if ($LASTEXITCODE -eq 0) {
# 現在のユーザーに書き込み権限を付与
Invoke-Expression "icacls `"$itemPath`" /grant `"$($currentUserName):(F)`""
Write-Host "$currentUserName がファイルを編集するための権限が付与されました"
} else {
Write-Host "ファイル $itemPath の所有者を変更できません。エラー情報: $takeownResult"
}
}
}