2012-10-02 3 views
0

배치 파일을 실행하기 만하면 컴퓨터가 Wi-Fi 또는 유선 인터넷을 통해 연결되도록하는 스크립트를 작성했습니다. 매번 사용자 이름과 암호를 입력 할 필요가 없기 때문에이 두 사람 사이를 전환하기 때문에이 글을 썼습니다.비밀번호를 입력하지 않고 PowerShell 스크립트를 관리자로 실행

참고 : UAC를 사용하도록 설정해야하므로 불행히도 해제하는 것은 옵션이 아닙니다.

무선 어댑터의 상태를 확인합니다. 현재 활성화되어 있으면 무선 어댑터가 꺼지고 유선 어댑터가 활성화됩니다. 무선이 활성화되어 있지 않으면 유선이 활성화되거나 비활성화됩니다. 이것은 코드입니다.

$adapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Where-Object {$_.ServiceName -ne "hamachi"} 
function wirelessOn 
{ 
    $wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"} 
    $wireless.Disable() 
    $wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"} 
    $wired.Enable() 
} 

function wirelessOff 
{ 
    $wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"} 
    $wired.Disable() 
    $wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"} 
    $wireless.Enable() 
} 

switch -wildcard ($adapter.description){ 
    "*wireless*" { 
     wirelessOn 
    } 
    "*gigabit*" { 
     wirelessOff 
    } 
} 

불행히도이 스크립트는 관리자 권한으로 실행되는 경우에만 올바르게 작동하므로 내가 작성한 전체 이유는 확실하지 않습니다. 아무 것도하지 않고도 관리자 권한으로 승격시킬 수있는 방법이 있습니까?

+0

, 당신은 UAC를 처리 할 필요없이 상승하는 스크립트를 실행하는 방법을 요구하고 있습니다. 이것은 UAC의 요점을 완전히 부정합니다. 그렇게 할 수 있다면 UAC에 심각한 구멍이 될 것입니다. 그렇지 않습니까? – x0n

+0

나는 그렇게 믿지 않는다. 왜냐하면 나는 텍스트 파일이나 하드 코딩 된 UAC로 전달할 자격 증명을 얻을 수 있다는 것을 알고 있기 때문에 나는 이것이 가능하다는 것을 알고 있습니다. 특정 서버가 sys 관리자가 로그인하여 "예"를 클릭하기를 기다리고 있기 때문입니다. – mhopkins321

답변

5

당신은 스크립트의 예를 실행하는 새로운 상승 PowerShell을 프로세스를 시작할 수 있습니다

Start-Process PowerShell -verb runas -ArgumentList '-noexit','-File','path-to-script' 

당신은 PowerShell 창 주위에 다음 '-noexit'을 제거하지만,의 출시를 디버깅받을 걸하고 싶지 않은 경우 스크립트, 유용합니다. 당신이 관리자 계정의 사용자 이름/암호에 대한 액세스 권한을 가지고 있다면

, 당신이 할 수 있습니다 : 사실상

# Capture encrypted password once and store to file 
$passwd = Read-Host "Enter password" -AsSecureString 
$encpwd = ConvertFrom-SecureString $passwd 
$encpwd > $path\password.bin 

# Afterwards always use this to start the script 
$encpwd = Get-Content $path\password.bin 
$passwd = ConvertTo-SecureString $encpwd 
$cred = new-object System.Management.Automation.PSCredential 'domain\username',$passwd 
Start-Process PowerShell -Cred $cred -ArgumentList '-noexit','-File','path-to-script' 
+0

나는 이것을 할 때 여전히 UAC를받습니다. – mhopkins321

+1

일반적인 UAC 구성은 프로그램 실행을 "허용"할 것인지 묻는 것입니다. 사용자 계정이 Administrators의 구성원이지만 표준 사용자 토큰으로 실행할 때 발생합니다. 실제로 표준 사용자 계정으로 실행되는 것 같습니다. 그렇다면 관리자 사용자 이름/암호를 알고 있습니까? 이 경우 자격 증명을 Start-Process cmdlet에 전달할 수 있습니다. 또한 안전하게 암호를 DPAPI에 저장 한 다음 스크립트에서 암호를 검색하여 암호를 입력하라는 메시지가 표시되지 않도록 할 수 있습니다. –

+0

"admin"계정에 대한 액세스 권한이 없습니다. 자격 증명을 입력하면 실제로 작동합니다. 어떻게 자동으로 저를 통과시킬 수 있습니까? – mhopkins321

관련 문제