Не распознано как имя командлета функции файла сценария или выполняемой программы powershell

Я получаю следующую ошибку, Ошибки поймали — TRAPPED: System.Management.Automation.RemoteException с сообщением TRAPPED: термин «D:ServiceNowRDC- Dev-AllagentscriptsPowerShellImMigration_script.ps1» не распознается как имя командлета, функция, скрипт fil e или исполняемая программа. Проверьте правильность написания имени или, если включен путь, убедитесь, что путь правильный и снова. Проблема связана с командой invoke-command

Invoke-Command -Session $Session -ScriptBlock $theCommand2

Я устал использовать -FilePath без везения. Также устал передавать команду и параметр отдельно:

Invoke-Command -Session $Session -ScriptBlock $theCommand2 -argumentlist $leName

Я запускаю сценарий, используя:

D:ServiceNowRDC-Dev-AllagentscriptsPowerShellinvokLyncUAdd.ps1 -param1 ‘CN=lync2013testuser1,CN=Users,DC=test,DC=COMPANY,DC=com’ -param2 ADsys-LyncProATSC -param3 Z0185-XAP0007-S.test.COMPANY.com
param( $param1, $param2, $param3 )

$ErrorActionPreference = «Stop»

Use the correct PowerShell in Visual Studio Code

# trap # write-output $(«TRAPPED: » + $_.Exception.GetType().FullName);
# write-output $(«TRAPPED: » + $_.Exception.Message);
# break
#>

$leName = $param1
$leName = («‘» + «$leName» + «‘»)

$thePath = ‘D:ServiceNowRDC-Dev-AllagentscriptsPowerShell’
$theCommand = $thePath+»ImMigration_script.ps1 -param1 $leName»
$theCommand2 = [Scriptblock]::Create($theCommand)

# Write-Host «We use string $theCommand below»

$Account = $param2
$useP = Get-Content $thePath’Information.txt’
$Prompt = convertto-securestring $useP -AsPlainText -Force
$leHost = $param3
try

$Credential = new-object -typename System.Management.Automation.PSCredential
-argumentlist $Account, $Prompt
$Timeout = New-PSSessionOption -IdleTimeout 60000
$Session = New-PSSession -ComputerName $leHost -Credential $Credential —
Authentication Credssp -SessionOption $Timeout -ErrorAction Stop
Invoke-Command -Session $Session -ScriptBlock $theCommand2
>
catch
$exceptType = $(«TRAPPED: » + $_.Exception.GetType().FullName);
$exceptMess = $(«TRAPPED: » + $_.Exception.Message);

>
finally
if($exceptType) < «Errors caught — $exceptType with message $exceptMess » >>

Любая помощь будет замечательной, спасибо

спросил(а) 2017-06-19T18:20:00+03:00 6 лет назад

Источник: progi.pro

Некоторые особенности PowerShell при работе с учетными записями пользователей

Я считал, что неплохо разбираюсь в powershell, но мне никогда не приходилось работать с учетными данными пользователей. Однако сейчас я в поиске работы и на одном из собеседований мне поставили тестовое задание написать скрипт, который должен был:

Как пользоваться ADB из Windows PowerShell?

  1. Проверить наличие и статус (включена/отключена) учетной записи пользователя.
  2. Проверить включена ли учетная запись в группу «Администраторы»
  3. Если учетная запись отсутствует, то создать учетную запись и добавить ее в группу администраторы, проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  4. Если учетная запись существует, но отключена либо не входит в группу «Администраторы», то включить учетную запись и добавить ее в группу «Администраторы», проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  5. Скрипт не должен зависеть от языка операционной системы.

Get-User admin

И тут же получил ошибку

Get-User : Имя «Get-User» не распознано как имя командлета, функции, файла сценария или выполняемой программы.

Немного опешив, от того, что такая полезная команда и не распознала я погуглил и обнаружил, что команда Get-User работает только в консоли Powershell для Exchange. Для работы с локальными пользователями необходимо использовать Get-Localuser, а для доменных Get-Aduser. Осознав свою ошибку, я вбил:

Читайте также:
Как написать программу turbo pascal

Get-Localuser admin

И получил ответ

Name Enabled Description —- ——- ———— Admin True Встроенная учетная запись администратора компьютера/домена

Ну теперь проверить есть пользователь или нет, не составит большого труда, однако и тут меня ждал очередной подвох. Через условный оператор if else сделать это оказалось не так-то просто.

Дело в том, что если пользователь есть в системе, то на выход мы получаем не значение true, а целый набор данных, с именем, описанием пользователя, включена эта учетная запись или нет. А если пользователя нет, то powershell выдает ошибку. Побродив по просторам интернета, я обнаружил, что для этих целей лучше использовать оператор try сatch.

$user = ‘admin’ try < Get-LocalUser $user -ErrorAction Stop | Out-Null write-host пользователь $user есть -foregroundcolor Green >Catch

Я добавил переменную $user, чтобы было проще менять имена пользователя во всем скрипте. ErrorAction Stop необходим, чтобы скрипт не прервался на этом шаге из-за ошибки. Знак | разделяет шаги конвейера, а Out-Null скроет вывод текста ошибки. Так же я добавил вывод текста с подсветкой, для удобства проверки скрипта.

Далее я захотел проверить, включена или отключена учетная запись. Как я уже говорил, команда Get-LocalUser выдает целый набор данных и для проверки, мне нужно было выделить только один параметр Enabled со значением true или false. Для этого я воспользовался следующей командой:

(Get-LocalUser $user).enabled

Убедившись, что он работает, я сделал следующую проверку и добавил команду включения пользователя.

$user = ‘admin’ if ((Get-LocalUser $user).enabled -eq «True») < write-host учетная запись включена -foregroundcolor Green >else

Для включения пользователя, естественно необходимо запускать консоль под правами администратора.

Во втором пункте задания, необходимо было определить входит ли пользователь в группу администраторов. Для проверки наличия пользователя в той или иной группе есть команда Get-LocalGroupMember. Однако имя группы администраторов, меняется от языка операционной системы. Поэтому мне пришлось воспользоваться стандартным SID S-1-5-32-544. Проверку я также сделал через try сatch.

$user = ‘admin’ try < Get-LocalGroupMember -SID S-1-5-32-544 -Member $user -ErrorAction Stop | Out-Null write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >Catch

В случае, если пользователь не состоит в группе, администраторов он будет в нее добавлен.
На следующем этапе, у меня стояла задача определить отключена настройка смены пароля у пользователя или нет. Тут я наткнулся на очередные подводные камни. Дело в том, что если у пользователя, срок действия пароля не ограничен, то параметр PasswordExpires не выдает никаких значений. А если эта галочка отключена, то у разных пользователей будет стоять разная дата смены пароля. Выход из этого положения я всё-таки придумал:

Читайте также:
Требования к программе обеспечения качества при изготовлении оборудования

if ((Get-LocalUser $user).PasswordExpires -eq $null) < write-host срок действия паролья не ограничен -foregroundcolor Green >else

Дальше мне было необходимо создавать пользователя. Я никак не ожидал, что и здесь меня может ждать подвох. При создании пользователя командой

Дело в том, что параметр -password должен использовать SecureString, вместо обычной текстовой строки. Для этого я сделал переменную $password и сконвертировал её в securestring.

А сам скрипт по созданию пользователя и добавления его в группу администраторов

new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user

Готовый скрипт учитывающий все условия у меня получился таким образом:

Однако хранение пароля администратора в скрипте — это не лучшая практика с точки зрения безопасности. Для этого можно использовать хэш пароля, а не сам пароль.

$user = ‘admin1’ $hash = «01000000d08c9ddf0115d1118c7a00c04fc297eb0100000048baf1b47a72d845b4eeda8659da9fd70000000002000000000010660000000100002000000004d2a3bf03aac92c2e172dc002d1fe8759da4655850462aface5c25f52921e05000000000e8000000002000020000000bfa652b6f7cc6845e3cee1831b54ab93dc272d0b2203024c3de8bc4789a2698a10000000923fb50dcf01125913534d0c1ba6d827400000002757df7d8a8b39c8e84b81323acff1d72419580a0022cf610926e5f081a2e895320088d482eb407f8157aad82f091abee7427b357e871d12238a8f74131238e7» $hash $password = ConvertTo-SecureString -String $hash $password new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user

Для того, чтобы получить хэш пароля можно воспользоваться следующим скриптом

$Secure = Read-Host -AsSecureString $Secure $hash = ConvertFrom-SecureString -SecureString $Secure $hash

Который запросит ввод пароля с клавиатуры.

И маленький бонус для вывода всех отключенных записей

Get-LocalUser | Where-Object

Надеюсь, потраченное мною время поможет кому-то в работе. Да и для себя будет полезно не забыть этот бесценный опыт.

Источник: habr.com

Не распознано как имя командлета функции файла сценария или выполняемой программы powershell

Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду(ы)
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%system32windowspowershellv1.0powershell.exe -file «%1»
%*
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%sysWOW64windowspowershellv1.0powershell.exe -file «%1»
%*
Версия 6.0 дя 32-битной ОС: ftype microsoft.powershellscript.1=»C:Program Files (86)PowerShell6.0.0pwsh.exe» -file «%1» %*
Версия 6.0 дя 64-битной ОС: ftype microsoft.powershellscript.1=»C:Program FilesPowerShell6.0.0pwsh.exe» -file «%1» %*

вопрос о подписи скриптов

Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
(для этих 2-х действий требуются административные права)

Прочее

  • Если используете «белый список» в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников кодировка скриптов на PowerShell должна быть 1251 (ANSI)
Читайте также:
Как правильно запустить программу на компьютер

Нужна команда Invoke-WebRequest.

Прийдется выкручиваться так:

Код:

$url = «http://www.astronomy.ru/forum/index.php»
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate($URL)
while($ie.Busy)
$ie.Document.getElementsByTagName(«td») | Where classname -eq lastpost
$ie.Quit()

т.е. к примеру есть запрос:

Как его с имитировать в PS со всеми headers, и продолжить работать с данным объектом, т.е. затем отправить POST запрос, сохранить coocks и т.д.

Столкнулся с непоняткой почему так
Get-ClusterNode | Get-ClusterResource | ?

Код:

Name State Group ResourceType
—- —— —— ————
Virtual Machine DC-01-UK-TRM-01 Online DC-01-UK-TRM-01 Virtual Machine
Virtual Machine DC-01-UK-TRM-02 Online DC-01-UK-TRM-02 Virtual Machine
Virtual Machine DC-01-UK-APP-01 Online DC-01-UK-APP-01 Virtual Machine
Virtual Machine DC-01-UK-SQL-01 Online DC-01-UK-SQL-01 Virtual Machine
Virtual Machine DC-01-UK-APP-03 Online DC-01-UK-APP-03 Virtual Machine
Virtual Machine DC-01-UK-SQL-02 Online DC-01-UK-SQL-02 Virtual Machine
Virtual Machine DC-01-UK-TRM-03 Online DC-01-UK-TRM-03 Virtual Machine

выдаёт список из 6 виртуалок, а вот так.

. кoтoрый в зaдaннoй пaпкe |»пaрaмeтр cкриптa»| и пoдпaпкaх ищeт фaйлы *.txt, и, ecли рaзмeр фaйлa бoльшe 200 Кб или дaтa пocлeднeгo измeнeния более 60 днeй, пeрeмeщaeт eгo в oтдeльную пaпку |»втoрoй пaрaмeтр cкриптa»|.
Cкрипт дoлжeн лoгирoвaть прoизвeдeнныe дeйcтвия в log.txt
Также при перемещении файлов необходимо обеспечить уникальность имен файлoв.

Добавлено:
Kakazabr
Честно говоря лень скрипт писать.
Get-Help Get-Item -Examples и Get-Help Get-ChildItem -Examples тебе в помощь.
На 13й странице темы мне объясняли как параметры для скрипта прописывать.

Код:

function get-CUserADGroups <
$user=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$groups=$user.groups.Translate([System.Security.Principal.NTAccount])
$userdomain=$user.name.Split(«»)[0]
$domaingroups=»»
$groups | % <
$_.value -match «^s*$userdomain\(.+)» | Out-Null;
$Matches[1];
$Matches.Clear()
>
>

Цитата:

. кoтoрый в зaдaннoй пaпкe |»пaрaмeтр cкриптa»| и пoдпaпкaх ищeт фaйлы *.txt, и, ecли рaзмeр фaйлa бoльшe 200 Кб или дaтa пocлeднeгo измeнeния более 60 днeй, пeрeмeщaeт eгo в oтдeльную пaпку |»втoрoй пaрaмeтр cкриптa»|.
Cкрипт дoлжeн лoгирoвaть прoизвeдeнныe дeйcтвия в log.txt
Также при перемещении файлов необходимо обеспечить уникальность имен файлoв.

Уникальность обеспечивается за суффикса из текущего времени.

2.Еще интересней — такой код не работает хотя по описанию командлета должно работать

С параметром -Path работает.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Источник: forum.ru-board.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru