Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перезаписать выводимые данные (http://forum.oszone.net/showthread.php?t=331797)

lox-ness 10-12-2017 17:07 2783479

Перезаписать выводимые данные
 
Добрый День!
Никак не получается выполнить перезапись выходных данных. Пробовали разные методы вывода типа (out-file, Add-Content и др.). Конечно вероятность, что в течении минуты будет такая потребность мала, но просто интересно как это осуществить.
Код:

cls
$GetInfo = Get-ADUser -Properties SamAccountName -filter {UserWorkstations -like "*"} -SearchBase "DC=s,DC=o,DC=r"
   
ForEach ($i in $Getinfo)
{
try
    {
   
                $i | Set-ADUser -Clear UserWorkstations -ErrorAction Stop
        }
    catch
    {
$datetime = Get-Date -Format "dd.MM.yyyy_HH_mm"
$file = "ad-" + $datetime + ".txt"
$folder = "d:\1" + $file_name

$i.SamAccountName | out-file -FilePath $folder\$file -Append

}
}

Добавляли условие в таком варианте, но тогда не создается файл с данными
Код:

$datetime = Get-Date -Format "dd.MM.yyyy_HH_mm"
$file = "ad-" + $datetime + ".txt"
$folder = "d:\1" + $file_name
$path = Test-Path $folder\$file
if ($path -eq "True"){
Remove-Item -Path $folder\$file | Out-File -InputObject $i.SamAccountName -FilePath $folder\$file -Append

}


Iska 10-12-2017 17:19 2783481

Как именно это: «Никак не получается выполнить перезапись» выражается?

lox-ness 10-12-2017 17:34 2783485

Т.е. если в течении минуты выполнить два раза скрипт данные просто добавляются, а не перезаписываются
Хотелось бы видеть один файл воктором данные будут присутствовать только один раз

Iska 10-12-2017 17:42 2783488

Цитата:

Цитата lox-ness
Т.е. если в течении минуты выполнить два раза скрипт данные просто добавляются, а не перезаписываются »

Простите, а зачем же Вы тогда использовали булевый параметр:
Цитата:

Цитата lox-ness
| out-file -FilePath $folder\$file -Append »

в Вашем скрипте?!! Вы сказали исполнителю — добавлять, он честно и добавляет. Ровно как указано в скрипте.

Но в чём смысл перезаписи — для Вашего кода — мне совершенно невдомёк: каждая последующая ошибка будет затирать предыдущую (в течении минуты). Спрашивается — в чём глубинный смысл такого поведения?!

lox-ness 10-12-2017 17:46 2783489

Если убрать -Append, то в файл выводиться только первая ошибка которая присутствует, а их там несколько
Пример с - Append - получаем 1,2,3
без -Append - получаем только 1

Iska 10-12-2017 18:05 2783496

Цитата:

Цитата lox-ness
Если убрать -Append, то в файл выводиться только первая ошибка которая присутствует, а их там несколько »

Не так. Выводятся они все, но остаётся в файле — только последняя, поскольку файл перезаписывается при каждой ошибке.

Вам следует определиться с тем, чего Вы хотите. И внятно сие изложить. Вот у меня есть предположение, что на самом деле Вам нужно, чтобы в файл попадали всё ошибки за одно исполнение кода. И на самом деле Вам нужно банально вынести задание имени файла вовне цикла:
Скрытый текст
Код:

Clear-Host

$datetime = Get-Date -Format "dd.MM.yyyy_HH_mm"
$file    = "ad-" + $datetime + ".txt"
$folder  = "d:\1" + $file_name

$GetInfo = Get-ADUser -Properties SamAccountName -Filter { UserWorkstations -like "*" } -SearchBase "DC=s,DC=o,DC=r"
   
ForEach($i in $Getinfo) {
    try {
        $i | Set-ADUser -Clear UserWorkstations -ErrorAction Stop
    } catch {
        $i.SamAccountName | out-file -FilePath $folder\$file -Append
    }
}


чтобы оно не могло меняться во время его выполнения.

lox-ness 10-12-2017 18:43 2783501

Вы все верно поняли, "Вот у меня есть предположение, что на самом деле Вам нужно, чтобы в файл попадали всё ошибки за одно исполнение кода"
в предложенном вами варианте проблема сохраняется.
Чтобы в файл попадали всё ошибки за одно исполнение кода и перезаписывали предыдущие (т.е. чтоб в файле был всегда один набор ошибок, а не две копии этих ошибок)

Iska 10-12-2017 18:55 2783502

Цитата:

Цитата lox-ness
предложенном вами варианте проблема сохраняется. »

Какая проблема на этот раз? Ибо той, что была, теперь быть не может в принципе.

Цитата:

Цитата lox-ness
Чтобы в файл попадали всё ошибки за одно исполнение кода и перезаписывали предыдущие (т.е. чтоб в файле был всегда один набор ошибок, а не две копии этих ошибок) »

Чтобы «и переписывали предыдущие» — какие предыдущие ошибки, откуда они возьмутся в файле, имя которого зависит от даты/времени? Такое может произойти только в том случае, если данный код запустить дважды в течении одной минуты, либо запустить два и более экземпляров исполнителя с данным кодом параллельно в течении минуты. У Вас какой случай из этих двух?

lox-ness 10-12-2017 19:03 2783505

В самом начале я об этом и писала, что если код запустить в течении минуты, то ошибки будут дописываться
И хотелось бы понять как вывести данные чтобы ошибки перезаписывались в файле, а не добавлялись
Можно ведь предположить, что в имени файла не будет привязки к дате и времени, изначально так и пытались сделать.

Iska 10-12-2017 19:15 2783506

lox-ness, в этом случае:
Цитата:

Цитата lox-ness
если код запустить в течении минуты, »

Вам следует добавить в код либо очистку файла, либо его удаление перед циклом (выбор может быть существенным в случае, если файл имеет настройки безопасности, отличные от умолчальных для каталога, но, полагаю, это не наш случай). И я бы посоветовал другой формат даты/времени для более удобной сортировки: сначала — год, потом — месяц, и лишь в конце — день.

Например, удаление — можно сначала проверять существование файла, а затем удалять, а можно тупо молча подавлять ошибку:
Скрытый текст
Код:

Clear-Host

$sOutFile = Join-Path -Path 'd:\1' -ChildPath "ad-$(Get-Date -Format 'yyyy.MM.dd_HH-mm').txt"
Remove-Item -Path $sOutFile -ErrorAction SilentlyContinue

$GetInfo = Get-ADUser -Properties SamAccountName -Filter { UserWorkstations -like "*" } -SearchBase "DC=s,DC=o,DC=r"
   
ForEach($i in $Getinfo) {
    try {
        $i | Set-ADUser -Clear UserWorkstations -ErrorAction Stop
    } catch {
        $i.SamAccountName | out-file -FilePath $sOutFile -Append
    }
}


lox-ness 10-12-2017 19:23 2783509

Спасибо, за подсказку. Все понятно


Время: 13:02.

Время: 13:02.
© OSzone.net 2001-