Представьте, что у вас есть таблица с названиями и адресами устройств и сервисов и вы можете легко получить из неё множество ярлыков для запуска браузера, putty, удалённого рабочего стола или telnet для управления этими устройствами. На картинке ниже схематично это показано:
Зачем это вообще нужно? Например к вам на эксплуатацию или обследование попала новая система или вам передали в пользование какую-нибудь тестовую среду. Чтобы не вбивать адреса или не копировать из файла каждый раз при подключении к хостам, можно однажды запустить скрипт и создать все ярлыки разом.
Скрипт на powershell обрабатывает файл формата CSV, находит столбцы «имя», «адрес», «описание», «доступ», создаёт ярлыки. Команда для ярлыка формируется исходя из значения «доступ» (http, https, rdp, telnet), аргументы – из значения «адрес». Кстати, «адрес» может быть и не IP-адресом, а именем хоста, например. Поле «описание» попадает в комментарий ярлыка. В качестве названия полей также можно использовать shortname, address, method и desc. (Думаю, понятно, что есть что). Принимаются следующие параметры:
К примеру, вот так:
По умолчанию, данные берутся из файла source.csv в текущем каталоге, ярлыки создаются тоже в текущем каталоге.
Пути к программам putty и Internet Explorer задаются в начале скрипта. Разумеется, для всех способов соединения можно использовать любые другие программы. Главное учитывайте способ передачи параметра. Например, в mstsc имя хоста для соединения передаётся не просто через пробел, а как /v:<адрес>.
Также, само собой, можете добавлять и другие способы соединения. Тут уже придётся править функцию createShct, раздел #Shortcut command.
Да, если вы первый раз запускаете powershell-скрипт, не забудьте выполнить:
А вот и сам скрипт:
Зачем это вообще нужно? Например к вам на эксплуатацию или обследование попала новая система или вам передали в пользование какую-нибудь тестовую среду. Чтобы не вбивать адреса или не копировать из файла каждый раз при подключении к хостам, можно однажды запустить скрипт и создать все ярлыки разом.
Скрипт на powershell обрабатывает файл формата CSV, находит столбцы «имя», «адрес», «описание», «доступ», создаёт ярлыки. Команда для ярлыка формируется исходя из значения «доступ» (http, https, rdp, telnet), аргументы – из значения «адрес». Кстати, «адрес» может быть и не IP-адресом, а именем хоста, например. Поле «описание» попадает в комментарий ярлыка. В качестве названия полей также можно использовать shortname, address, method и desc. (Думаю, понятно, что есть что). Принимаются следующие параметры:
- source <файл_источник> : путь к файлу CSV
- folder <папка> : путь к папке, в которой нужно создавать ярлыки
- noreplace : параметр нужно указать, если ярлыки были изменены вручную и хочется сохранить эти изменения при следующем запуске скрипта
- namePolicy shortname | shortname_addr | addr_shortname | shortname_lastoct | shortname_last2octs : способ формирования имени ярлыка. Как видно, это один из вариантов: значение столбца «имя» из исходного файла, значение «имя» + «адрес», «адрес» + «имя» или же «имя» с добавлением одного или двух последних октетов «адрес».
К примеру, вот так:
PS C:\temp>.\create-shortcuts.ps1 -source MyNewFriends.csv -folder d:\job\new –noreplace –namePolicy shortname_addr
По умолчанию, данные берутся из файла source.csv в текущем каталоге, ярлыки создаются тоже в текущем каталоге.
Пути к программам putty и Internet Explorer задаются в начале скрипта. Разумеется, для всех способов соединения можно использовать любые другие программы. Главное учитывайте способ передачи параметра. Например, в mstsc имя хоста для соединения передаётся не просто через пробел, а как /v:<адрес>.
Также, само собой, можете добавлять и другие способы соединения. Тут уже придётся править функцию createShct, раздел #Shortcut command.
Да, если вы первый раз запускаете powershell-скрипт, не забудьте выполнить:
PS C:\temp>set-executionpolicy -executionpolicy unrestricted -scope currentuser
А вот и сам скрипт:
####################################################
# Remote access shortcuts creation script
# v0.9
#
# Defaults:
#
# * Create shortcuts in current directory
# * Overwrite all shortcuts
# * Shortcut name is "shortname" column value
# * Shortcut comment is "desc" column value
####################################################
# Создания ярлыков удалённого управления скрипт
# версия 0.9
#
# По умолчанию:
#
# * Ярлыки создаются в текущем каталоге
# * Все ярлыки перезаписываются
# * Имя ярлыка – столбец "имя"
# * Комментарий ярлыка - столбец "описание"
####################################################
# Arguments
param (
[switch]$noreplace, # 'Do not overwrite shortcuts on creation' default is to overwrite
$folder = '', # 'Target folder path' default is current dir
$source = 'source.csv', # 'Source data file path' default
$namePolicy = 'shortname' # 'Shortcut naming policy' default
)
$csvPath = $source # Source data file path
$shPath = $folder # Target folder path
$shNoReplace = $noreplace # Do not overwrite shortcuts on creation
$shHTTPcmd = '"C:\Program Files\Internet Explorer\iexplore.exe"'
$shRDPcmd = 'mstsc.exe'
$shSSHcmd = '"C:\Program Files\PuTTY\putty.exe"'
$shTELNETcmd = 'telnet.exe'
$shNamePolicy = $namepolicy # Shortcut naming policy
function createShctFile($shText,$shCmd,$shArgs, $desc = '')
{ # creating shortcut file
$shPathSh = "$shPath\$shText.lnk"
if ( (test-path -path $shPathSh) -and $shNoReplace ) {return}
$shct = $oshell.CreateShortcut($shPathSh)
$shct.TargetPath = $shCmd
$shct.Arguments = $shArgs
$shct.Description = $desc
$shct.Save()
}
function createShct($shortname,$desc='',$addr,$method)
{ # preparing shortcurt parameters
# Shortcut name
$shText = $shortname
if (!$shortname)
{
write-host '(i) No shortcut name defined'
return
}
switch ($shNamePolicy) {
'shortname' {
$shText = $shortname
}
'shortname_addr' {
$shText = "$shortname $addr"
}
'addr_shortname' {
$shText = "$addr $shortname"
}
'shortname_lastoct' {
$octs = ($addr -split '\.')
if ($octs[3]) {$shText += ' ' + $octs[3]}
}
'shortname_last2octs' {
$octs = ($addr -split '\.')
if ($octs[3]) {$shText += ' ' + $octs[2]+ '.' + $octs[3]}
}
}
#Shortcut command
$shArgs = ''
switch ($method) {
'http' {
$shCmd = $shHTTPCmd
$shArgs = "http://$addr"
}
'https' {
$shCmd = $shHTTPCmd
$shArgs = "https://$addr"
}
'rdp' {
$shCmd = $shRDPCmd
$shArgs = "/v:$addr"
}
'ssh' {
$shCmd = $shSSHcmd
$shArgs = $addr
}
'telnet' {
$shCmd = $shTELNETcmd
$shArgs = $addr
}
}
createShctFile -shText $shText -shCmd $shCmd -shArgs $shArgs -desc $desc
}
##### Main
# Init
$oshell = New-Object -comObject WScript.Shell
$basePath = (get-location).path # Working dir
[System.IO.Directory]::SetCurrentDirectory($basePath) # Set working dir to script working dir
# Env check
if (!(test-path -pathtype leaf -path $csvPath))
{ # Cheking for source CSV path
write-host "(!) Path to source CSV not found: $csvPath"
exit
}
if (!($shPath)) {$shPath = $basePath }
if (!(test-path -pathtype container -path $shPath))
{ # Cheking for target folder path
write-host "(!) Path for shortcuts not found: $shPath"
exit
}
# Run
$csv = get-content $csvPath | Convertfrom-CSV -UseCulture
foreach ($str in $csv)
{
$shrt = $str.shortname
if ($str.имя) {$shrt = $str.имя}
$addr = $str.addr
if ($str.адрес) {$addr = $str.адрес}
$accs = $str.method
if ($str.доступ) {$accs = $str.доступ}
$desc = $str.desc
if ($str.описание) {$desc = $str.описание}
createShct -shortname $shrt -desc $desc -addr $addr -method $accs
}