Компьютерный форум 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=313658)

antikvar2013 08-04-2016 18:47 2624500

Проверить наличие файла и удалить
 
Добрый День!
Прошу помощи, необходимо определить наличие конкретного ярлыка расположенного в общем профиле пользователя (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 2624512

Цитата:

Цитата antikvar2013
Еще понять не могу как прикрутить определить какая OS (так как зависит путь к рабочему столу) »

Путь к Рабочему столу зависит не от ОС, а от применения правильных методов, например: Easily Finding Special Paths for PowerShell Scripts | PowerShell content from Windows IT Pro (потребует .Net Framework 4 для наличия потребного свойства). Более простой и рабоче-крестьянский вариант — использование объектов старого доброго WSH:
Код:

(New-Object -ComObject WScript.Shell).SpecialFolders.Item("AllUsersDesktop")
Мне только непонятна Ваша логика с проверкой.

Foreigner 08-04-2016 19:42 2624519

Цитата:

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

Тоже не понял, зачем проверять соединение, а потом у себя искать аc.lnk
Вам сначала надо получить список переменных другого компьютера, через WMI:
Код:

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

antikvar2013 08-04-2016 19:49 2624521

Я конечно чайник в этом вопросе, но цель была такая:
Беру список
Код:

$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 2624530

Цитата:

Цитата antikvar2013
а потом нужно я так думаю проверить какая ОС стоит »

Не нужно. Нужно получить доступ к удалённому управлению им — Wbem или WinRM. А затем уже можно будет пытаться играться с получением пути к тамошнему AllUsersDesktop и т.д.

Цитата:

Цитата antikvar2013
проверить на рабочем столе … наличие этого файла и удалить его»

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

antikvar2013 09-04-2016 09:53 2624598

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

Foreigner 09-04-2016 10:04 2624601

Цитата:

Цитата antikvar2013
Может все таки можно через условия решить проблемку? »

В вашем примере, вы проверяете наличие компьютера в сети, а потом на СВОЕМ компьютере ищите файл аc.lnk

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


Время: 04:06.

Время: 04:06.
© OSzone.net 2001-