2016-12-22 4 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 

Проблема, кажется, извлекая Data.txt от пользователей $ENV:Temp папки. Кажется, что это немного повторяющаяся вещь, разве нет более чистого способа сделать это?

Благодарим за помощь.

+0

Запись данных на общий ресурс на сервере? –

+0

Thx для наконечника! Я просто подумал, что есть лучший способ. Потому что теперь нужно проверить, присутствует ли файл с временем ожидания на нем. – 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 проверки и добавьте -Append к Export-Csv, и он будет держать лесозаготовительные диски в файл при каждом входе в системе.

Смежные вопросы