2016-12-22 1 views
0

우리는 Windows 7 클라이언트에 로그온 한 사용자의 매핑 된 드라이브를 수집하려고합니다. 이렇게하려면 예약 된 작업을 만들어 해당 사용자로 실행해야합니다. 이 잘 작동하지만 예약 된 작업에서 데이터를 검색 할 때 문제가 있습니다.예약 된 작업에서 데이터 가져 오기

코드

Invoke-Command -ScriptBlock { 
    $User = 'John' 
    $Script = 'C:\Users\' + $User + '\AppData\Local\Temp' + '\Script.ps1' 
    $File = 'C:\Users\' + $User + '\AppData\Local\Temp' + '\Data.txt' 


    $Code = { 
     $User = 'John' 
     $File = 'C:\Users\' + $User + '\AppData\Local\Temp' + '\Data.txt' 
     Get-WmiObject -Class win32_mappedlogicaldisk | Select-Object Name, ProviderName | 
      Export-Csv $File -Encoding UTF8 -NoTypeInformation 
    } 

    $Code | Set-Content $Script -Encoding utf8 

    schtasks /create /RL HIGHEST /SC ONCE /ST 23:00 /TN "Test" /TR "powershell.exe -ExecutionPolicy Bypass -File '$Script'" /RU "$env:USERDNSDOMAIN\$User" 
    schtasks /run /TN "Test" 
    schtasks /delete /F /TN "Test" 

    for ($i = 0; $i -le 5; $i++) { 
     if (Test-Path $File) { 
      Import-Csv $File 
      Break 
     } 
     else { 
      Start-Sleep -Seconds 1 
     } 
    } 

} -ComputerName $Computer 

문제는 사용자 $ENV:Temp 폴더에서 Data.txt를 검색하는 것으로 보인다. 반복적 인 것 같아요. 더 깨끗한 방법이 없나요?

도움 주셔서 감사합니다. 이 비 대화 형 스크립트이기 때문에

+0

서버의 공유에 데이터를 씁니까? –

+0

팁을위한 Thx! U는 더 좋은 방법이 있다고 생각했습니다. 이제는 파일에 대기 시간이 있는지 확인해야하기 때문입니다. – DarkLite1

+0

도메인에 가입 된 컴퓨터에서 실행 하시겠습니까? 그렇다면이 작업을 수행하는 훨씬 쉬운 방법이 있습니다. –

답변

0

, 난 그냥 대기 루프의 단축 버전으로, 동일한 방법을 사용하십시오 :

while (!(Test-Path $File)) { Start-Sleep 1 } 

Import-Csv $File 

좀 더 우아하고 있지만, 본질적으로 동일.

0

나는 아래와 같이 Login Script으로 갈 것입니다.

$File = "\\server\share\$($env:username).csv" 

if (!(Test-Path $File)) { 
    Get-WmiObject -Class win32_mappedlogicaldisk | Select-Object Name, ProviderName | Export-Csv $File -Encoding UTF8 -NoTypeInformation 
} 

그것이 사용자의 컨텍스트에서 실행 (그리고 그들의 매핑 된 드라이브를 얻을) 당신이 얻을 것이 훨씬 쉬울 것이다, 그래서 오히려 로컬 드라이브가 아닌 중앙 공유에 파일을 기록 할 것이다 로그인 스크립트의로 자료.

다른 샘플을 원하는 경우/이동 적절하게 파일을 삭제하거나 Test-Path 체크를 제거하고 Export-Csv-Append를 추가하고 모든 로그온 파일에 기록 드라이브를하겠습니다 수 있습니다.