ps1 스크립트를 일반 사용자로 시작할 때 관리자 권한으로 다시 시작하는 스크립트
11415 단어 PowerShell
개요
Powershell 있는데, "관리자로 실행"하는 것이 번거롭기 때문에 스크립트 측에서 마음대로 관리자 시작 버리게했습니다.
(확인 다이얼로그가 나옵니다)
본문
1. 코드
main.ps1# 管理者権限でない場合、現在のスクリプトを管理者権限で実行して自分は終了
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
$commandPath = $PSCommandPath
echo ("not admin. restart as admin:" + $commandPath)
# 引数を、管理者権限実行用に作り直す
# 引数が、クォートされた空白を含む文字列である場合を想定。
# そこまで考えないでいいなら、Start-Process の $argsToAdminProcess の代わりに$Argsを入れても問題ない。
$argsToAdminProcess = ""
$Args.ForEach{
echo ("not admin: args: " + $PSItem)
$argsToAdminProcess += " `"$PSItem`""
}
# 実行
Start-Process powershell.exe "-File `"$commandPath`" $argsToAdminProcess" -Verb RunAs
# デバッグ用に、閉じる前に止める。
Pause
exit
}
echo "admin."
# 管理権限実行に渡ってきた引数を確認する
$Args.ForEach{
echo ("admin: args: " + $PSItem)
}
# デバッグ用に、閉じる前に止める。
Pause
2. 명령 및 실행 결과
명령 및 실행 결과PS C:\dev\src\tmp> .\main.ps1 aaa "bbb ccc" ddd
not admin. restart as admin:C:\dev\src\tmp\main.ps1
not admin: args: aaa
not admin: args: bbb ccc
not admin: args: ddd
続行するには、Enter キーを押してください...:
관리 권한으로 시작된 측의 실행 결과admin.
admin: args: aaa
admin: args: bbb ccc
admin: args: ddd
続行するには、Enter キーを押してください...:
$Args.ForEach{...
로 인수를 재조립하지 않은 경우, 인수는 aaa
bbb
ccc
ddd
3. 빠진 곳
# 実行
Start-Process powershell.exe "-File `"$commandPath`" $argsToAdminProcess" -Verb RunAs
Start-Processの引数
와 powershell.exeの引数
가 섞여 있다고 알아차릴 때까지는 의미를 몰랐습니다.Start-Processの引数
는 powersshell.exe
과 -Verb RunAs
,powershell.exeの引数
는 "-File `"$commandPath`" $argsToAdminProcess"
입니다.
그리고 여기가 안된다면, Start-Process로 기동한 윈도우가 즉시 소멸하기 때문에, 무엇이 나쁜지 단서가 잡히지 않고 괴로웠다. . .
감사합니다. [Security.Principal.WindowsPrincipal]
4. 짧게 한 버전
디버깅 용 echo 또는 깎은 버전입니다.
코멘트 넣어 8행이므로, 관리 권한이 필요한 스크립트의 머리에 일률 카피해도, 그런 방해도 아닐까 생각합니다.
짧은 버전# 管理者権限でない場合、現在のスクリプトを管理者権限で実行して自分は終了
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
$argsToAdminProcess = ""
$Args.ForEach{ $argsToAdminProcess += " `"$PSItem`"" }
Start-Process powershell.exe "-File `"$PSCommandPath`" $argsToAdminProcess" -Verb RunAs
exit
}
echo "admin."
# 管理権限実行に渡ってきた引数を確認する
$Args.ForEach{
echo ("admin: args: " + $PSItem)
}
참고로 한 페이지
Powershell 스크립트를 관리자 권한으로 다시 실행하는 방법
꽤 범용적으로 작성되었습니다.
【PowerShell】 PowerShell을 관리자 권한으로 실행하고 싶다! 소스의 선두에 묻는 것만으로 자동으로 관리자 권한으로 승격하는 스크립트! - 이거 토로구
한 라이너로 작성되었습니다. 인수는 고려되어 있지 않습니다만, 인수 캐릭터 라인내의 공백 고려 없이 좋으면, $Args 를 들어가야 합니다.
나중에 떨어지는
인수를 반영하려고 노력했지만 인수를 사용하는 시점에서 높은 확률로 powershell을 기동하고 있기 때문에 인수 대응의 필요성은 낮다고 생각했습니다.
ouch ...
Reference
이 문제에 관하여(ps1 스크립트를 일반 사용자로 시작할 때 관리자 권한으로 다시 시작하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kumanobori/items/69555aceb72cbff388c6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. 코드
main.ps1
# 管理者権限でない場合、現在のスクリプトを管理者権限で実行して自分は終了
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
$commandPath = $PSCommandPath
echo ("not admin. restart as admin:" + $commandPath)
# 引数を、管理者権限実行用に作り直す
# 引数が、クォートされた空白を含む文字列である場合を想定。
# そこまで考えないでいいなら、Start-Process の $argsToAdminProcess の代わりに$Argsを入れても問題ない。
$argsToAdminProcess = ""
$Args.ForEach{
echo ("not admin: args: " + $PSItem)
$argsToAdminProcess += " `"$PSItem`""
}
# 実行
Start-Process powershell.exe "-File `"$commandPath`" $argsToAdminProcess" -Verb RunAs
# デバッグ用に、閉じる前に止める。
Pause
exit
}
echo "admin."
# 管理権限実行に渡ってきた引数を確認する
$Args.ForEach{
echo ("admin: args: " + $PSItem)
}
# デバッグ用に、閉じる前に止める。
Pause
2. 명령 및 실행 결과
명령 및 실행 결과
PS C:\dev\src\tmp> .\main.ps1 aaa "bbb ccc" ddd
not admin. restart as admin:C:\dev\src\tmp\main.ps1
not admin: args: aaa
not admin: args: bbb ccc
not admin: args: ddd
続行するには、Enter キーを押してください...:
관리 권한으로 시작된 측의 실행 결과
admin.
admin: args: aaa
admin: args: bbb ccc
admin: args: ddd
続行するには、Enter キーを押してください...:
$Args.ForEach{...
로 인수를 재조립하지 않은 경우, 인수는 aaa
bbb
ccc
ddd
3. 빠진 곳
# 実行
Start-Process powershell.exe "-File `"$commandPath`" $argsToAdminProcess" -Verb RunAs
Start-Processの引数
와 powershell.exeの引数
가 섞여 있다고 알아차릴 때까지는 의미를 몰랐습니다.Start-Processの引数
는 powersshell.exe
과 -Verb RunAs
,powershell.exeの引数
는 "-File `"$commandPath`" $argsToAdminProcess"
입니다.그리고 여기가 안된다면, Start-Process로 기동한 윈도우가 즉시 소멸하기 때문에, 무엇이 나쁜지 단서가 잡히지 않고 괴로웠다. . .
감사합니다.
[Security.Principal.WindowsPrincipal]
4. 짧게 한 버전
디버깅 용 echo 또는 깎은 버전입니다.
코멘트 넣어 8행이므로, 관리 권한이 필요한 스크립트의 머리에 일률 카피해도, 그런 방해도 아닐까 생각합니다.
짧은 버전
# 管理者権限でない場合、現在のスクリプトを管理者権限で実行して自分は終了
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
$argsToAdminProcess = ""
$Args.ForEach{ $argsToAdminProcess += " `"$PSItem`"" }
Start-Process powershell.exe "-File `"$PSCommandPath`" $argsToAdminProcess" -Verb RunAs
exit
}
echo "admin."
# 管理権限実行に渡ってきた引数を確認する
$Args.ForEach{
echo ("admin: args: " + $PSItem)
}
참고로 한 페이지
Powershell 스크립트를 관리자 권한으로 다시 실행하는 방법
꽤 범용적으로 작성되었습니다.
【PowerShell】 PowerShell을 관리자 권한으로 실행하고 싶다! 소스의 선두에 묻는 것만으로 자동으로 관리자 권한으로 승격하는 스크립트! - 이거 토로구
한 라이너로 작성되었습니다. 인수는 고려되어 있지 않습니다만, 인수 캐릭터 라인내의 공백 고려 없이 좋으면, $Args 를 들어가야 합니다.
나중에 떨어지는
인수를 반영하려고 노력했지만 인수를 사용하는 시점에서 높은 확률로 powershell을 기동하고 있기 때문에 인수 대응의 필요성은 낮다고 생각했습니다.
ouch ...
Reference
이 문제에 관하여(ps1 스크립트를 일반 사용자로 시작할 때 관리자 권한으로 다시 시작하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kumanobori/items/69555aceb72cbff388c6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
인수를 반영하려고 노력했지만 인수를 사용하는 시점에서 높은 확률로 powershell을 기동하고 있기 때문에 인수 대응의 필요성은 낮다고 생각했습니다.
ouch ...
Reference
이 문제에 관하여(ps1 스크립트를 일반 사용자로 시작할 때 관리자 권한으로 다시 시작하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kumanobori/items/69555aceb72cbff388c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)