четверг, 26 февраля 2015 г.

Windows обозреватель компьютеров, или браузер компьютеров

Эта небольшая статья относится к периодически возникающей ошибке в сети, когда частично не отображаются компьютеры из рабочей группы.
Очень хорошо описано здесь. Мой случай - один сетевой сегмент, несколько рабочих групп. В каждой группе свой мастер-браузер. Просмотреть кто мастер, можно с помощью утилиты browstat.exe на XP, либо на любой ОС семейства Windows nbtstat -a <Имя каждого компьютера группы>. Как запустить на Windows 2008 R2 описано в предыдущей статье.

Также есть скрипт отсюда

@for /f "delims=\ " %%i in ('net view ^|find "\\"') do @ping -n 1 %%i 2<&1 |find "(0" >nul &&@nbtstat -a %%i|find "MSBROWSE"&& echo %%i

Нужно запускать как cmd-файл. Очень удобно пользоваться.

Принудительное указание мастера - включение в автомат службы Браузер компьютеров (на Windows 2008 отключена по-умолчанию) и в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser\Parameters
"MaintainServerList"="Yes"
"IsDomainMaster"="True"

после перегрузить всех

Windows 2008 R2 nbtstat enable

При включенном WINS, и выключенном Браузере компьютеров, у меня nbtstat не запускался. Эта утилита для 32-битных ОС. Я ее нашел в c:\windows\sysnative и скопировал в c:\windows\syswow64 и после этого заработало.

среда, 25 февраля 2015 г.

Windows PowerShell отправка почты НЕ на gmail

В поиске в основном примеры с gmail, и я пошел по неверному пути - указывал стандартный порт отправки 465 отдельным параметром -port 465, по аналогии как в примерах с gmail с нестандартным портом, но так отправка не работала. Оказывается нужно было убрать этот параметр -port, если порт стандартный.

$From = "user1@mail.com"
$To = "user2@mail.gov"
$Cc = "user3@gmail.com"
$Attachment = "C:\temp\backup.log"
$Subject = "Email Subject"
$Body = "Insert body text here"

# $SMTPServer = "smtp.gmail.com" для gmail нужно добавить 
параметр для альтернативного порта -port 587
# $SMTPPort = "587" для gmail. 
Если порт стандартный 465, то параметр -port не нужен

$SMTPServer = "smtp.mail.com"

Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -UseSsl `
-Credential (Get-Credential) -Attachments $Attachment

для автоматического ввода пароля при отправке

$pass = ConvertTo-SecureString "PaSsW0rD" -AsPlainText -Force  
$mycred = new-object -typename System.Management.Automation.PSCredential `
                     -argumentlist "user1@mail.com",$pass

и тогда параметр заменяем на такой

-Credential $mycred

Вариант 2
  $cred = Get-Credential
  $cred | Export-CliXml c:\temp\cred.clixml
  $cred2 = Import-CliXml c:\temp\cred.clixml

Windows PowerShell version, запуск скриптов на компьютере

Просмотр версии PowerShell

$host.version

или

$PSVersionTable.PSVersion

или

get-host

PowerShell 4 версии можно скачать здесь. Находится в составе Windows Management Framework 4.0. Для ОС Windows 7; Windows Server 2008 R2; Windows Server 2012

Для запуска скриптов нужно проверить политику выполнения скриптов. Посмотреть текущее значение политики можно командой Get-ExecutionPolicy. Политика выполнения может иметь значения:

Restricted — блокируется выполнение любых скриптов. Значение по умолчанию;
AllSigned — разрешено выполнение скриптов, имеющих цифровую подпись;
RemoteSigned — скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи;
Unrestricted — разрешено выполнение любых скриптов. При запуске неподписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение;
Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.

Обычно для безпроблемного выполнения скриптов достаточно задать значение RemoteSigned. Изменить текущее значение можно командой Set-ExecutionPolicy, например:

Set-ExecutionPolicy RemoteSigned -force

вторник, 24 февраля 2015 г.

Windows PowerShell парсинг лога

Есть лог такого вида:
Sa 21.Feb.2015 00:07 ERROR # 3: f:\user\a.user\Documents\очень\длинный\путь\или\символы \в\нечитаемой\кодировке\документ.doc ==> \\BACKUP\5\user\a.user\Documents\очень\длинный\путь\или\символы \в\нечитаемой\кодировке\документ.doc: Системе не удается найти указанный путь. 

Нужно создать по каждому пользователю файл со списком каталогов и файлов, которые им нужно переименовать или укоротить путь.

Для этого разобьём на массив с разделителем слэш \ ,укоротим до символа  ==>. Выбирать будем по кодам ошибок "ERROR # 3:"

$path = "c:\path\"
$log = Get-Content backup.log 

# очищаем от ранее созданных файлов
Remove-Item -Path ($path + '*')

for($i=0;$i -lt $log.count;$i++) {
   If(($log[$i] -match " ERROR # 3:") -Or ($log[$i] -match " ERROR # 123:")){
     $value = @()
     $tmp = $log[$i].split("\")
     If($tmp[3] -match "Documents"){
       for($ii=3;$ii -lt $tmp.count;$ii++) {                                               If($tmp[$ii] -match "==>") {
            # Вырезаем ==>
            $value += $tmp[$ii].Substring(0, ($tmp[$ii].length - 4))
            
            # Заново собираем
            $value = $value -join '\'
            
            # Вырезаем в конце слэш \
            $value = $value.Substring(0, ($value.length - 1))
            
            # Добавляем переход на новую строку
            $value += "`n"                                
            break
            }
            Else{
                $value += $tmp[$ii]                                     
                }
          }
       # создаем файл по логину пользователя $tmp[2].ToString()
       Add-Content -Path ($path + $tmp[2].ToString() + '.txt') -Value $value             }
   }
}

вторник, 17 февраля 2015 г.

четверг, 5 февраля 2015 г.

Windows Java HTTP Error 12057 не хочет обновляться в домене, или не работает проверка версии, или проблема с сертификатами

Под пользователем нужно зайти в свойства Internet Explorer - Дополнительно. Ищем там в Безопасности - Проверять не отозван ли сертификат сервера. Убираем галочку.

вторник, 3 февраля 2015 г.

Windows terminal синий экран при завершении сессии

В процессах видно что висит процесс splwow64.exe. После гугления находим:

splwow64.exe – это программная прослойка, которая позволяет 32-битным приложениям соединиться с 64-битным диспетчером службы очереди печати.

По-умолчанию этот процесс не относится к терминальным процессам, а является системным, из-за чего обычному пользователю удаленного рабочего стола завершить его не удается.

Чтобы насильно объявить splwow64.exe процессом, который принадлежит к терминальной сессии, нужно отредактировать системный реестр:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs

создаем параметр splwow64.exe, типа DWORD и присваиваем ему значение 0.

понедельник, 2 февраля 2015 г.

Linux терминал запуск из истории команд

Как выбрать в терминале из истории, когда-то введенную команду? Если недавно введенная - то стрелочкой вверх, а если команд двадцать назад?
Решение:
history | grep <искомое>
В найденном строчки будут пронумерованные. И запуск выбранной команды:
!NNN
где NNN это номер строки.