Спрашивающий
Win10 и PowerShell

Вопрос
-
Коллеги, добрый день!
Возможно моя проблема не очень соотносится с данной веткой, но я попробую.
Есть скрипт PS, который сверяет хэши паролей пользователей на КДомена со словарем
$DictFile = "C:\DSInternals\password2.txt" $DC = "ll.local" $Domain = "DC=ll, DC=local" $Dict = Get-Content $DictFile | ConvertTo-NTHashDictionary Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordHashes $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts $EWB.Saveas('C:\password.txt')
Все работало, пока коллега не обновил пакет
DSInternals
После обновления я не могу получить результаты данного скрипта, т.к. в новом пакете убрали командлет ConvertTo-NTHashDictionary и вместо него рекомендуется использовать командлет Test-PasswordQuality
Пытался переделать скрипт, но не получилось. Я не очень разбираюсь в PS
Пробовал
$Dict = Get-Content $DictFile Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts
Ошибка
PS C:\Windows\system32> $Dict = Get-Content $DictFile Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts Get-Content : Не удается привязать аргумент к параметру "Path", так как он имеет значение NULL. строка:1 знак:21 + $Dict = Get-Content $DictFile + ~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Get-Content], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand Get-ADReplAccount : Не удается проверить аргумент для параметра "Server". Аргумент пустой или имеет значение NULL. Укажите непустой аргумент, не имеющий значение NULL, п осле чего повторите выполнение команды. строка:2 знак:32 + Get-ADReplAccount -All -Server $DC -NamingContext $Domain | + ~~~ + CategoryInfo : InvalidData: (:) [Get-ADReplAccount], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,DSInternals.PowerShell.Commands.GetADReplAccountCommand
и второй вариант
Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile "C:\distr\PS\DSInternals\PasswordDict.txt" -ShowPlainTextPasswords -IncludeDisabledAccounts
Ошибка
PS C:\Windows\system32> Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile "C:\distr\PS\DSInternals\PasswordDict.txt" -ShowPlainTextPasswords -IncludeDisabledAccounts Get-ADReplAccount : Имя "Get-ADReplAccount" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку. строка:1 знак:1 + Get-ADReplAccount -All -Server $DC -NamingContext $Domain | + ~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-ADReplAccount:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
Во втором варианте, видимо, опять командлет заменили.
Можете мне помочь собрать скрипт в соответствии с изменениями пакета
DSInternals
Скрипт нужен для того, чтобы юзеры не создавали простые пароли. Раньше, когда скрипт работал, было выявлено три топ менеджера со слабыми паролями.
Спасибо!
- Изменено Pogreb 16 апреля 2019 г. 7:05
- Перемещено Dmitriy VereshchakMicrosoft contingent staff, Moderator 16 апреля 2019 г. 7:11 Из Win10
16 апреля 2019 г. 7:04
Все ответы
-
в первом варианте у вас переменная $dictfile пустая о чем и написано в ошибке
The opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 7:10Модератор -
Отредактировал скрипт в таком виде:
$Dict = Get-Content $DictFile $DictFile = C:\DSInternals\PasswordDict1.txt Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts
Запустил, ошибок нет. Видимо работает.
Отпишу по результату
16 апреля 2019 г. 7:38 -
Отредактировал скрипт в таком виде:
$Dict = Get-Content $DictFile $DictFile = C:\DSInternals\PasswordDict1.txt Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts
Запустил, ошибок нет. Видимо работает.
Отпишу по результату
вы $dictfile декларируете во второй строке а используете в первой...
это может работать только если копировать команды в консоль и при условии что вы это будете делать дважды
The opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 8:02Модератор -
$DictFile = C:\DSInternals\PasswordDict1.txt $Dict = Get-Content $DictFile Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts
Поменял строки местами
Запустил, Ошибок нет.
Делает сравнение со словарем?
Раньше,мне кажется, быстрее делалось
16 апреля 2019 г. 8:53 -
Не работает.
Больше часа уже висит.
Раньше это занимало около 15 минут.
Возможно где то цикл?
16 апреля 2019 г. 10:06 -
Парни, можете подсказать, где ошибка в скрипте?16 апреля 2019 г. 11:50
-
думаю стоит написать в поддержку упомянутого модуля
вы используете ажурад?
The opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 12:01Модератор -
ажурад это что?16 апреля 2019 г. 12:03
-
ажурад это что?
насколько я понял get-adreplaccount вытягивает аккауты которые должны рекплицироваться с azure ad, вот и возникает вопрос используете ли вы его?The opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 12:06Модератор -
Нет, АжурАД нет в домене, есть облачная почта16 апреля 2019 г. 12:08
-
Нет, АжурАД нет в домене, есть облачная почта
посмотрите что вам вернет первая часть команды потом можно пару выходов пустить на вход второй команды и посмотреть результаты, но в любом случае напишите в поддержку модуля например на гитхабе, возможно это известная проблема на вашей версии модуля и ее необходимо обновить или откатитьThe opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 12:14Модератор -
Получается проблема у разработчика может быть, а не в моем не правильном написании скрипта?16 апреля 2019 г. 12:53
-
может конечно :)
The opinion expressed by me is not an official position of Microsoft
16 апреля 2019 г. 12:58Модератор -
На Гитхабе автор предлагает следующий текст скрипта
Get-ADReplAccount -All -Server LON-DC1 -NamingContext "dc=adatum,dc=com" | Test-PasswordQuality
-WeakPasswordHashesFile .\pwned-passwords-ntlm-ordered-by-count.txt -IncludeDisabledAccounts
Мне не ясен параметр -WeakPasswordHashesFile
Ниже описание параметра с Гитхаба
-WeakPasswordHashesFile
{{Fill WeakPasswordHashesFile Description}}
Type: StringParameter Sets: (All)Aliases:
Required: FalsePosition: NamedDefault value: NoneAccept pipeline input: FalseAccept wildcard characters: False
И это текстовый файл .\pwned-passwords-ntlm-ordered-by-count.txt
Это список паролей, с которыми проверяются пароли юзеров?
И .\ это какую директорию по умолчанию означает?
Спасибо!
Запустил скриптGet-ADReplAccount -All -Server ll -NamingContext "dc=ll,dc=lal" | Test-PasswordQuality -WeakPasswordHashesFile .\PasswordDict1.txt
получил ошибку
Test-PasswordQuality : Не удается найти параметр, соответствующий имени параметра "WeakPasswordHashesFile". строка:1 знак:100 + ... asswordQuality -WeakPasswordHashesFile .\PasswordDict1.txt + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Test-PasswordQuality], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,DSInternals.PowerShell.Commands.TestPasswordQualityCommand
- Изменено Pogreb 16 апреля 2019 г. 13:15
16 апреля 2019 г. 13:14 -
Странно, но командлета -WeakPasswordHashesFile нет
Есть -WeakPasswordHashes
PS C:\Windows\system32> Get-ADReplAccount -All -Server ll -NamingContext "dc=ll,dc=local" | Test-PasswordQuality -WeakPasswordHashes .\PasswordDict1.txt -IncludeDisabledAccounts
Test-PasswordQuality : Не удается привязать параметр "WeakPasswordHashes". Не удается преобразовать значение ".\PasswordDict1.txt" типа "System.String" в тип "System.Collections.Generic.IDic
tionary`2[System.Byte[],System.String]".
строка:1 знак:120
+ ... PasswordHashes .\PasswordDict1.txt -IncludeDisabledAccounts
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-PasswordQuality], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,DSInternals.PowerShell.Commands.TestPasswordQualityCommandЧто то я не так с текстовым файлом делаю
Вот это .\ можно заменить как C:\Folder ?- Изменено Pogreb 16 апреля 2019 г. 13:42
16 апреля 2019 г. 13:33 -
.\ это текущая директория в вашем случае равная c:\windows\system32 и вы можете без проблем сменить этот относительный путь на свой предопределенный, например на c:\folder
обновите модуль до последнего, возможно у вас промежуточная версия
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 16 апреля 2019 г. 15:49
16 апреля 2019 г. 14:45Модератор -
Установил последнюю версию 3.3
Написал на гитхабе, сегодня получил ответ.
Оригинал
Hi , the
-ShowPlainTextPasswords
parameter ofTest-PasswordQuality
cmdlet had been removed in version 3.0 due to some performance optimizations, see the Changelog.
Does theGet-ADReplAccount
cmdlet give you any results?
Could you please just try running this?$Dict = Get-Content 'C:\DSInternals\PasswordDict1.txt' Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswords $Dict
Не нашел параметра -WeakPasswords но нашел -WeakPasswordsHashes
Редактирую запрос и запускаю
$DC = "ll" $Domain = "DC=ll, DC=local" $Dict = Get-Content 'C:\DSInternals\PasswordDict1.txt' Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordHashes $Dict
Получаю ответ
Test-PasswordQuality : Не удается привязать параметр "WeakPasswordHashes". Не удается преобразовать значение "ZZZZZZZZZZZZZZZZZZZZ" типа "System.String" в тип "System.Collections.Generic.IDi ctionary`2[System.Byte[],System.String]". строка:4 знак:102 + ... PasswordHashes $Dict + ~~~~~ + CategoryInfo : InvalidArgument: (:) [Test-PasswordQuality], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,DSInternals.PowerShell.Commands.TestPasswordQualityCommand
"ZZZZZZZZZZZZZZZZZZZZ" это единственный пароль в словаре C:\DSInternals\PasswordDict1.txt
Что именно запрос не может преобразовать?
- Изменено Pogreb 17 апреля 2019 г. 5:46
17 апреля 2019 г. 5:30 -
Заметил странную вещь.
Не обновился у меня модуль DSInternals
ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 2.22 DSInternals {ConvertTo-NTHash, ConvertTo-LMHash, Set-SamAccountPasswordHash, ConvertFrom-UnicodePassword...}
Делаю удаление модуля и получаю ошибку
Пробовал удалить двумя командами, без результатно
PS C:\Windows\system32> Uninstall-Module -Name DSInternals -AllVersions -Force PackageManagement\Uninstall-Package : Для указанных условий поиска и имен модулей "DSInternals" не найдено никаких совпадений. C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2157 знак:21 + ... $null = PackageManagement\Uninstall-Package @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package], Exception + FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage PS C:\Windows\system32> Remove-Module -Name DSInternals PS C:\Windows\system32>
Пытался принудительно обновить модуль
PS C:\Windows\system32> Install-Module C:\DSInternals\DSInternals_v3.3\DSInternals\DSInternals.psd1 -Force PackageManagement\Install-Package : Совпадения для указанных условий поиска и имени пакета "C:\DSInternals\DSInternals_v3.3\DSInternals\DSInternals.psd1" не найдены. Чтобы просмотреть все до ступные зарегистрированные источники пакетов, используйте командлет Get-PSRepository. C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 знак:21 + ... $null = PackageManagement\Install-Package @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Хотел версию модуля посмотреть, не вышло
PS C:\Windows\system32> Get-InstalledModule -Name DSInternals PackageManagement\Get-Package : Для указанных условий поиска и имен модулей "DSInternals" не найдено никаких совпадений. C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2216 знак:9 + PackageManagement\Get-Package @PSBoundParameters | Microsoft. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Microsoft.Power...lets.GetPackage:GetPackage) [Get-Package], Exception + FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackage
Как мне корректно удалить/переустановить модуль?
PS: удалил банально с сервера c:\Windows\System32\WindowsPowerShell\v1.0\Modules\ через Delete
Ночью так же установил обновления на PS до 5.1 может мне список команд обновить надо?
Так как ни install-module ни import-module не дают результатов об установке модуля
- Изменено Pogreb 18 апреля 2019 г. 6:01
18 апреля 2019 г. 5:47 -
Можете подсказать как запрос
$DC = "ll"
$Domain = "DC=ll,DC=local"
$Dict = Get-Content 'C:\DSInternals\PasswordDict1.txt' Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsHashes $Dict
В одну строку записать?
- Изменено Pogreb 18 апреля 2019 г. 13:39
18 апреля 2019 г. 13:39 -
Для версии 3.3 скрипт выглядит следующим образом
$DC = "ll" $Domain = "DC=ll, DC=local" $Dict = 'C:\DSInternals\PasswordDict1.txt' Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile $Dict
Можете подсказать, как правильно результат скрипта отправить в облачную почту Майкрософт?
22 апреля 2019 г. 7:31