|
|
Перезаписать выводимые данные
Добрый День!
Никак не получается выполнить перезапись выходных данных. Пробовали разные методы вывода типа (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
}
|
Как именно это: «Никак не получается выполнить перезапись» выражается?
|
Т.е. если в течении минуты выполнить два раза скрипт данные просто добавляются, а не перезаписываются
Хотелось бы видеть один файл воктором данные будут присутствовать только один раз
|
Цитата:
Цитата lox-ness
Т.е. если в течении минуты выполнить два раза скрипт данные просто добавляются, а не перезаписываются »
|
Простите, а зачем же Вы тогда использовали булевый параметр:
Цитата:
Цитата lox-ness
| out-file -FilePath $folder\$file -Append »
|
в Вашем скрипте?!! Вы сказали исполнителю — добавлять, он честно и добавляет. Ровно как указано в скрипте.
Но в чём смысл перезаписи — для Вашего кода — мне совершенно невдомёк: каждая последующая ошибка будет затирать предыдущую (в течении минуты). Спрашивается — в чём глубинный смысл такого поведения?!
|
Если убрать -Append, то в файл выводиться только первая ошибка которая присутствует, а их там несколько
Пример с - Append - получаем 1,2,3
без -Append - получаем только 1
|
Цитата:
Цитата 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
предложенном вами варианте проблема сохраняется. »
|
Какая проблема на этот раз? Ибо той, что была, теперь быть не может в принципе.
Цитата:
Цитата lox-ness
Чтобы в файл попадали всё ошибки за одно исполнение кода и перезаписывали предыдущие (т.е. чтоб в файле был всегда один набор ошибок, а не две копии этих ошибок) »
|
Чтобы «и переписывали предыдущие» — какие предыдущие ошибки, откуда они возьмутся в файле, имя которого зависит от даты/времени? Такое может произойти только в том случае, если данный код запустить дважды в течении одной минуты, либо запустить два и более экземпляров исполнителя с данным кодом параллельно в течении минуты. У Вас какой случай из этих двух?
|
В самом начале я об этом и писала, что если код запустить в течении минуты, то ошибки будут дописываться
И хотелось бы понять как вывести данные чтобы ошибки перезаписывались в файле, а не добавлялись
Можно ведь предположить, что в имени файла не будет привязки к дате и времени, изначально так и пытались сделать.
|
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
}
}
|
Спасибо, за подсказку. Все понятно
|
Время: 13:02.
© OSzone.net 2001-