none
Закрытие сетевого доступа RRS feed

  • Вопрос

  • Всем привет!

    Необходим скрипт для следующих манипуляций:

    есть csv-файл с 2-мя колонками. 1-я колонка - имя расшареной папке на компьютере ну и 2-я колонка - dns-имя компа.

    Все компы доменные. Домен уровня 2012 R2. Помогите наваять скрипт который бы убирал сетевой доступ у папок.

    При этом сетевой доступ необходимо убирать только у компов, у которых dns-имя имеет вид dom-w-xxxxx, dom-n-xxxx или djm-t-xxxx  - где xxxx - число которое может быть 3-х,4-х либо 5-ти значным. На все остальных компах убирать сетевой доступ не нужно.

    Так же хотелось бы не убирать шары с папок вида Samsung SCX-*.

    Прошу сильно не пинать за наглость. Всем за ранее спасибо за любую помощь!  

    4 апреля 2016 г. 11:19

Ответы

  • Import-CSV sh.csv | Where {$_.ShareName -notmatch "Samsung SCX"} | Where {$_.ComputerName -match "-\d{3,5}"} | Foreach {
    	Invoke-WmiMethod -Path "Win32_Share.Name='$($_.ShareName)'" -Name Delete -ComputerName $_.ComputerName
    }

    • Предложено в качестве ответа Vector BCOModerator 4 апреля 2016 г. 20:59
    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    4 апреля 2016 г. 11:52
    Отвечающий
  • if($t.TcpTestSucceeded) - должно быть   if($t)

    $($PsExecPath) \\$pc  cmd /c net share $shara /delete /Y   " - должно быть

    $($PsExecPath) \\$pc  cmd /c "net share $shara /delete /Y" 

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 8:14
    Отвечающий
  • Для WMI надо правило в firewall - https://msdn.microsoft.com/en-us/library/windows/desktop/aa822854(v=vs.85).aspx

    Для winrm:

    Import-CSV sh.csv | Where {$_.ShareName -notmatch "Samsung SCX"} | Where {$_.ComputerName -match "-\d{3,5}"} | Foreach {
    	$share = $_.ShareName
    	Invoke-Command {
    		Invoke-WmiMethod -Path "Win32_Share.Name='$using:share'" -Name Delete
        } -ComputerName $_.ComputerName
    }

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 5:46
    Отвечающий
  • И как добавить проверку на наличие компа в сети? - Ping?

    Where {$_.ComputerName -match "-\d{3,5}"} | Where {Test-Connection $_.ComputerName -Quiet -Count 2 } | Foreach

    Вы не подскажите как обойтись без запуска winrm quickconfig на машине? - Выше я сказал, разрешить правило для WMI - https://support.microsoft.com/en-us/kb/875605  и использовать первый вариант скрипта с Invoke-WMIMethod.

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 7:04
    Отвечающий

Все ответы

  • Import-CSV sh.csv | Where {$_.ShareName -notmatch "Samsung SCX"} | Where {$_.ComputerName -match "-\d{3,5}"} | Foreach {
    	Invoke-WmiMethod -Path "Win32_Share.Name='$($_.ShareName)'" -Name Delete -ComputerName $_.ComputerName
    }

    • Предложено в качестве ответа Vector BCOModerator 4 апреля 2016 г. 20:59
    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    4 апреля 2016 г. 11:52
    Отвечающий
  • Спасибо за ответ!

    Ошибок не пишет но и шары нестопорит. Вот пример файла:

    Name0;Netbios_Name0
    share;DOM-W-00358
    users$;video05


    4 апреля 2016 г. 12:23
  • Name0;Netbios_Name0 заменить на ShareName;ComputerName

    Import-CSV sh.csv -Delimiter ";"

    4 апреля 2016 г. 12:27
    Отвечающий
  • Доброе утро.

    Теперь пишет:

    Invoke-WmiMethod : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
    At line:2 char:2
    +     Invoke-WmiMethod -Path "Win32_Share.Name='$($_.Name0)'" -Name Delete -ComputerN ...
    +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [Invoke-WmiMethod], COMException
        + FullyQualifiedErrorId : InvokeWMICOMException,Microsoft.PowerShell.Commands.InvokeWmiMethod

    хотя комп доступен по сети и WinRm включен...

    5 апреля 2016 г. 5:33
  • Для WMI надо правило в firewall - https://msdn.microsoft.com/en-us/library/windows/desktop/aa822854(v=vs.85).aspx

    Для winrm:

    Import-CSV sh.csv | Where {$_.ShareName -notmatch "Samsung SCX"} | Where {$_.ComputerName -match "-\d{3,5}"} | Foreach {
    	$share = $_.ShareName
    	Invoke-Command {
    		Invoke-WmiMethod -Path "Win32_Share.Name='$using:share'" -Name Delete
        } -ComputerName $_.ComputerName
    }

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 5:46
    Отвечающий
  • Спасибо так работает!
    Но есть одно НО.

    Запускаю скрипт для машины с WinXP. Получаю вот что:

    [DOM-W-1771] Connecting to remote server DOM-W-1771 failed with the following error message : The client cannot connect to the destination specified in the request. Verify that the service on 
    the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination 
    is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig". For more information, see the about_Remote_Troubleshooting 
    Help topic.

    Запускаю на этой машине winrm quickconfig - получаю ошибку winrm 2147749890.

    Добавляю в Ваш скрипт ключ -SessionOption (New-PSSessionOption -NoMachineProfile)  для Invoke-Command  вот тогда то скрипт отрабатывает без проблем.

    Вы не подскажите как обойтись без запуска winrm quickconfig на машине?

    И как добавить проверку на наличие компа в сети?

    Заранее спасибо!

    5 апреля 2016 г. 6:55
  • И как добавить проверку на наличие компа в сети? - Ping?

    Where {$_.ComputerName -match "-\d{3,5}"} | Where {Test-Connection $_.ComputerName -Quiet -Count 2 } | Foreach

    Вы не подскажите как обойтись без запуска winrm quickconfig на машине? - Выше я сказал, разрешить правило для WMI - https://support.microsoft.com/en-us/kb/875605  и использовать первый вариант скрипта с Invoke-WMIMethod.

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 7:04
    Отвечающий
  • У меня WMI разрешен групповыми политиками...

    Ну да ладно. Пытаюсь провернуть это дело через psexec. Вы как то мне уже помогали и я переделал Ваш скрипт - получилось вот что:

    $PsExecPath = "C:\test\PsExec.exe"

    Import-CSV C:\Uncle_Igor\share.csv -Delimiter ";" | Where {$_.Name0 -notmatch "Samsung SCX"} | Where {$_.Netbios_Name0 -match "-\d{3,5}"} | Foreach {

        $pc = $_.Netbios_Name0
        $shara =  $_.Name0 
    Write-Host "Processing computer $pc ..."
    $t = Test-Connection -ComputerName $pc -Quiet
    if($t.TcpTestSucceeded)
    {

    $mystring=@"
    $($PsExecPath) \\$pc  cmd /c net share $shara /delete /Y   "
    "@
    invoke-expression $mystring
    }

    }

    но шары почему то не закрываются...

    Не подскажите где я накосячил?

    5 апреля 2016 г. 8:07
  • if($t.TcpTestSucceeded) - должно быть   if($t)

    $($PsExecPath) \\$pc  cmd /c net share $shara /delete /Y   " - должно быть

    $($PsExecPath) \\$pc  cmd /c "net share $shara /delete /Y" 

    • Помечено в качестве ответа Igor3000 5 апреля 2016 г. 9:03
    5 апреля 2016 г. 8:14
    Отвечающий
  • Спасибо Вам всё работает!!!
    5 апреля 2016 г. 9:03