Войти

Показать полную графическую версию : [решено] Проверить наличие файла и удалить


antikvar2013
08-04-2016, 18:47
Добрый День!
Прошу помощи, необходимо определить наличие конкретного ярлыка расположенного в общем профиле пользователя (OS разные) на рабочем столе и удалить его.
Предварительно включить проверку доступности ПК. После многих попыток все это собрать в одно целое, получилось только 1/3. Проверку доступности проходит, остальное нет.
Еще понять не могу как прикрутить определить какая OS (так как зависит путь к рабочему столу)

$Computers = Get-Content -Path d:\ps.txt

foreach ($Server in $Computers)
{
if (test-Connection -ComputerName $Server -Count 2 -Quiet)
{
write-Host "$Server; доступен" -ForegroundColor Green
}
elseif (test-path -path "$env:allusersprofile\desktop\аc.lnk")

{
Write-Host "$Server; Есть файл" -ForegroundColor Green
}
else
{
Write-Host "$Server; Нет такого файла" -ForegroundColor Red
}
}

Iska
08-04-2016, 19:26
Еще понять не могу как прикрутить определить какая OS (так как зависит путь к рабочему столу) »
Путь к Рабочему столу зависит не от ОС, а от применения правильных методов, например: Easily Finding Special Paths for PowerShell Scripts | PowerShell content from Windows IT Pro (http://windowsitpro.com/powershell/easily-finding-special-paths-powershell-scripts) (потребует .Net Framework 4 для наличия потребного свойства). Более простой и рабоче-крестьянский вариант — использование объектов старого доброго WSH:
(New-Object -ComObject WScript.Shell).SpecialFolders.Item("AllUsersDesktop")

Мне только непонятна Ваша логика с проверкой.

Foreigner
08-04-2016, 19:42
Мне только непонятна Ваша логика с проверкой. »
Тоже не понял, зачем проверять соединение, а потом у себя искать аc.lnk
Вам сначала надо получить список переменных другого компьютера, через WMI:

get-wmiobject -class win32_environment -computer $server | select name,variablevalue

antikvar2013
08-04-2016, 19:49
Я конечно чайник в этом вопросе, но цель была такая:
Беру список
$Computers = Get-Content -Path d:\ps.txt
Потом пытаюсь проверить ПК на доступность
if (test-Connection -ComputerName $Server -Count 2 -Quiet)
Он мне говорит я доступен, а потом нужно я так думаю проверить какая ОС стоит и проверить на рабочем столе
test-path -path "$env:allusersprofile\desktop\аc.lnk"
наличие этого файла и удалить его например через Rename-Item
Собрать в условия не получается

Iska
08-04-2016, 20:07
а потом нужно я так думаю проверить какая ОС стоит »
Не нужно. Нужно получить доступ к удалённому управлению им — Wbem или WinRM. А затем уже можно будет пытаться играться с получением пути к тамошнему AllUsersDesktop и т.д.

проверить на рабочем столе … наличие этого файла и удалить его»
Можно просто тупо пытаться удалять, задав для командлета «… -ErrorAction SylentlyContinue» (пишу по памяти).

antikvar2013
09-04-2016, 09:53
Через WinRM проще, но как понимаю нужно чтоб служба включена была на ПК.
Через Wbem мне в короткие сроки не освоить.
Может все таки можно через условия решить проблемку?

Foreigner
09-04-2016, 10:04
Может все таки можно через условия решить проблемку? »
В вашем примере, вы проверяете наличие компьютера в сети, а потом на СВОЕМ компьютере ищите файл аc.lnk

Разберитесь с удаленным подключением (а не пингом машины в сети), только после этого можно говорить, как там удалять файлы.




© OSzone.net 2001-2012