Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перезаписать выводимые данные

Ответить
Настройки темы
PowerShell - [решено] Перезаписать выводимые данные

Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добрый День!
Никак не получается выполнить перезапись выходных данных. Пробовали разные методы вывода типа (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

}

Отправлено: 17:07, 10-12-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:19, 10-12-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:34, 10-12-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата lox-ness:
Т.е. если в течении минуты выполнить два раза скрипт данные просто добавляются, а не перезаписываются »
Простите, а зачем же Вы тогда использовали булевый параметр:
Цитата lox-ness:
| out-file -FilePath $folder\$file -Append »
в Вашем скрипте?!! Вы сказали исполнителю — добавлять, он честно и добавляет. Ровно как указано в скрипте.

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

Отправлено: 17:42, 10-12-2017 | #4


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:46, 10-12-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 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
    }
}

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

Отправлено: 18:05, 10-12-2017 | #6


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:43, 10-12-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата lox-ness:
предложенном вами варианте проблема сохраняется. »
Какая проблема на этот раз? Ибо той, что была, теперь быть не может в принципе.

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

Отправлено: 18:55, 10-12-2017 | #8


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:03, 10-12-2017 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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
    }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:15, 10-12-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перезаписать выводимые данные

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Как перезаписать 512 байт MBR. HarrysFerrarievich Накопители (SSD, HDD, USB Flash) 26 26-02-2015 01:37
CMD/BAT - GUI окно, в которое вводяться данные передает эти данные в cmd файл, (редактирует) Neqste Скриптовые языки администрирования Windows 3 07-09-2011 05:31
DISM успешно монтирует образ, но файлы нельзя ни скопировать, ни перезаписать Ufalk Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 16 10-04-2011 00:49
(решено) Можно ли перезаписать или восстановить завирусованный файл kernel32.dll AlexKKK Защита компьютерных систем 7 19-10-2005 18:38
Учетные данные buffer26 Сетевые технологии 5 08-06-2004 21:13




 
Переход