Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580

PowerShell 6.x+ нет Windows Workflow Foundation

21.06.2021, 13:13. Показов 3272. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
название темы скорее вопрос. Т.к. потетестил на PS 7.1 ( надеюсь не особо устаревшим ) и получил ответ вида. Выделил шрифтом Вold:
Кликните здесь для просмотра всего текста
PS F:\...\Script> .\1PingStatusARMWorkFlowCSV211.ps1
ParserError: F:\...\Script\1PingStatusARMWorkFlowCSV2 11.ps1:3
Line |
3 | Workflow PingStatus
| ~~~~~~~~~~~~~~~~~~~
| Workflow is not supported in PowerShell 6+.
PS F:\...\Script> $PsVersionTable

Name Value
---- -----
PSVersion 7.1.0
PSEdition Core
GitCommitId 7.1.0
OS Microsoft Windows 6.1.7601 Service Pack 1
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0

Имя ОС Майкрософт Windows Server 2019 Standard
Версия 10.0.17763 Сборка 17763
PS C:\...> GCI 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse |Get-ItemProperty -name Version,Release -EA 0 | Where { $_.PSChildName -match '^(?!S)\p{L}'} | Select PSChildName, Version, Release

PSChildName Version Release
----------- ------- -------
Client 4.7.03190 461814
Full 4.7.03190 461814
Client 4.0.0.0

PS C:\....> [Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 17763 0

На 7-ке и 19-ом сервере идентично. В PShell до версии 5.1 начиная с 3.0 всё работает
Хелпер почти также за это Breaking Changes for PowerShell 6.x
The Windows Presentation Framework is not supported on CoreCLR.
какие варианты возможны:
1. ошибаюсь и оно всё-таки где-то есть. Может в Function объединили и упростили без всяких -parallel, InlineScript {<script block>}, sequence {}
2. пропустил что-то в изменениях MS. Могу признать под №1, т.к. за всем конечно не услежу.
Но всё-таки. Это ситуация отношения к самосборкам с гитхаба и MS пока выше 5.1 ничего не сделала или что-то другое.
Очень странно, в чем смысл перехода выше PS 5.1.
3. надо установить NFW 5.1 и выше
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2021, 13:13
Ответы с готовыми решениями:

Для установки SharePoint Services 3.0 требуется Windows Workflow Foundation
Не знаю куда постить, пишу в раздел, который ближе по теме. Поставил windows server 2008 r2, .NET Framework 4.5, добавил в ролях роль...

Lotus Workflow и интеграция Workflow с Domino
Народ, если кто работал с Lotus Workflow помогите плз разобраться,что это и с чем его едят. Или подскажите ссылки на какие-нибудь учебники...

Windows Presentation Foundation
Надо создать редактор картинок.Картинка отображается с помощью элемента Image.Как можно изменить яркость и контрастность картинки?Как можно...

34
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 13:50
PowerShell
1
2
3
4
5
6
Get-Help about_workflows
 
...
PowerShell Workflow was introduced in PowerShell 3.0 and the module is
available up to PowerShell 5.1.
...
Используйте ForEach-Object -Parallel -ThrottleLimit

Добавлено через 9 минут
Цитата Сообщение от Segera Посмотреть сообщение
в чем смысл перехода выше PS 5.1
Рано или поздно Windows PowerShell заменят на PowerShell Core, а Net Framework на Net Core. Пока в Net Core постепенно внедряют недостающие компоненты, которые есть в Net Frameworks.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 13:55  [ТС]
полный скрикт, отлично работает на PS 4.0, 5.1
PowerShell
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
Import-module ActiveDirectory
 
Workflow PingStatus
{
   param([string[]]$Computers)
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
$PathOutCSV = "\\ServerTest\ScanOut\ScanOut\ArmPingStatusWorkFlow-NameClient-$NowTime.csv"
 
ForEach -Parallel -ThrottleLimit ($Computer in $Computers)  
{
        Sequence    {         
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
$User = (GWMI -ComputerName $Computer -Class Win32_ComputerSystem)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
                        
            ForEach -Parallel ($Computer in $Computers)     
                {
    IF (Test-Connection -ComputerName $Computer -BufferSize 1 -Count 1 -ea 0 -Quiet)
                       {
 
$output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Имя пользователя" = $User.UserName
            "Операционная система" = $Os.OperatingSystem
            "Доступ" = $Ping
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
 
   
                        }
                
        Else
               { 
 
    $output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Имя пользователя" =  "       "
            "Операционная система" =  "       "
            "Доступ" =  $Ping
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append 
 
                }
                }
}
}
}
 
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object #  -Descending All Hosts Servers Computers On increasing По нарастающей в имени компьютера
 
PingStatus -Computer $Computers
ответ:
PS F:\......\Script> .\1PingStatusARMWorkFlowCSV2111.ps1
ParserError: F:\Publ\MS\Script\Test\Script\1PingStatu sARMWorkFlowCSV2111.ps1:9
Line |
9 | ForEach -Parallel -ThrottleLimit ($Computer in $Computers)
| ~~
| Unexpected token 'in' in expression or statement.
идея работать со списком из AD.
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 14:00
Цитата Сообщение от Segera Посмотреть сообщение
Unexpected token 'in' in expression or statement.
Вы перепутали цикл foreach () {} и ForEach-Object
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 14:06  [ТС]
не успел внести коррект. RSAT установлен.
PowerShell
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
Import-module ActiveDirectory
 
Workflow PingStatus
{
   param([string[]]$Computers)
   
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
$PathOutCSV = "\\ServerTest\ScanOut\ScanOut\ArmPingStatusWorkFlow-NameClient-$NowTime.csv"
 
ForEach -Parallel -ThrottleLimit ($Computer in $Computers)  
{
        Sequence    {         
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
$User = (GWMI -ComputerName $Computer -Class Win32_ComputerSystem)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
                        
            ForEach -Parallel -ThrottleLimit  ($Computer in $Computers)     
                {
    IF (Test-Connection -ComputerName $Computer -BufferSize 1 -Count 1 -ea 0 -Quiet)
                       {
 
$output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Имя пользователя" = $User.UserName
            "Операционная система" = $Os.OperatingSystem
            "Доступ" = $Ping
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Долгое Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
 
   
                        }
                
        Else
               { 
 
    $output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Имя пользователя" =  "       "
            "Операционная система" =  "       "
            "Доступ" =  $Ping
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Долгое Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append 
 
                }
                }
}
}
}
 
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object #  -Descending All Hosts Servers Computers On increasing По нарастающей в имени компьютера
 
PingStatus -Computer $Computers
Цитата Сообщение от lesser Посмотреть сообщение
Вы перепутали цикл
извините не понял. Как уйти от ForEach-Object или использовать правильно в 7.1
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 14:26
Цитата Сообщение от Segera Посмотреть сообщение
Как уйти от ForEach-Object или использовать правильно в 7.1
Вам надо переписать скрипт, вообще убрать workflow, или оформить как функцию, а все $Computers распараллеливать в ForEach-Object. В скрипт не вникал, но можно как-то так:

PowerShell
1
2
3
4
5
6
7
8
9
function PingStatus
{
    param ([string] $Computer)
    .....
}
 
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object
 
$Computers | ForEach-Object -Parallel { PingStatus $_ } -ThrottleLimit 4
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 14:33  [ТС]
в этом случае скорее всего не получится вывести с форматированием в EPCSV -Path ... -Delimiter ";", чтобы получить таблицу с необходимыми A,B,C,D,E ....
в текстовом на начальном этапе получилось, но после много чего менял. Формат лист не подходит.
ForEach-Object наверное должно быть внутри
function PingStatus
{
param ([string] $Computer)
.....
$Computers | ForEach-Object -Parallel { PingStatus $_ } -ThrottleLimit 4
}
Если вне, пока пойму как это работает.
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object
PingStatus -Computer $Computers
Так?
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 14:45
Цитата Сообщение от Segera Посмотреть сообщение
ForEach-Object наверное должно быть внутри
Зачем? Ну если хотите внутри, то тогда скорее так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
function PingStatus
{
param ([string[]] $Computers)
 
    $Computers | ForEach-Object -Parallel {
 
        'что-то делаете с' $_
 
    } -ThrottleLimit 4
}
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object
PingStatus -Computers $Computers
Добавлено через 2 минуты
Тогда и функция не нужна:

PowerShell
1
2
3
4
5
6
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object
$Computers | ForEach-Object -Parallel {
 
        'что-то делаете с' $_
 
} -ThrottleLimit 4
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 14:52  [ТС]
Сделал следующий коррект:
PowerShell
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
Function PingStatus
            {
            
   param([string[]]$Computers)
 
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
$PathOutCSV = "\\ServerTest\ScanOut\ScanOut\ArmPingStatusWorkFlow-NameClient-$NowTime.csv"
 
{
 Import-module ActiveDirectory 
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
$User = (GWMI -ComputerName $Computer -Class Win32_ComputerSystem)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
                        
  $output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Имя пользователя" = $User.UserName
            "Операционная система" = $Os.OperatingSystem
            "Доступ" = $Ping
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Долгое Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
 
}
            }
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object
$Computers | ForEach-Object -Parallel { PingStatus $_. } -ThrottleLimit
ответ:
PS F:\.....\Script> .\1PingStatusARMWorkFlowCSV22111.ps1
ForEach-Object: F:\......\Script\1PingStatusARMWorkFlowC SV22111.ps1:33
Line |
33 | … omputers | ForEach-Object -Parallel { PingStatus $_. } -ThrottleLimit
| ~~~~~~~~~~~~~~
| Missing an argument for parameter 'ThrottleLimit'. Specify a parameter of type 'System.Int32' and try again.
удаление -ThrottleLimit не приводит к нужному результату.
может требуется какое-то окончание или -NULL в {} или ещё что-то
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 14:59
Цитата Сообщение от Segera Посмотреть сообщение
Missing an argument for parameter 'ThrottleLimit'
Прочитайте справку по Foreach-Object

PowerShell
1
help % -showwindow
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 15:14  [ТС]
согласен. надо нырять в теорию.
Если добавить любое значение в -ThrottleLimit ... ответ вида:
PingStatus: The term 'PingStatus' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
или
Missing an argument for parameter 'ThrottleLimit'. Specify a parameter of type 'System.Int32' and try again
если без значения -ThrottleLimit
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
21.06.2021, 15:39
Цитата Сообщение от Segera Посмотреть сообщение
PingStatus: The term 'PingStatus' is not recognized as a name of a cmdlet
Я хз, что вы там делаете. Тестируйте каждую команду, например бросается в глаза Get-WmiObject, внезапно, да.

Я просто подсказал, как можно организовать многопоточность вместо workflow, не более.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
21.06.2021, 20:24  [ТС]
Цитата Сообщение от lesser Посмотреть сообщение
Тестируйте каждую команду,
с этого начал. все работают при задании для каждого переменной $Computer
Буду тестить идеи Сегодня, 14:26 - 14:45. Скрипт выполнялся на PS 5.1 для 700 хостов в течении двух с половиной - трех часов. Хотелось проверить на PS 7.1. Ответ вида Workflow is not supported in PowerShell 6+. и далее из хелпера не понравился. Подумал это лишь у меня или все давно знают.
Спасибо за идеи.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
22.06.2021, 03:23
Цитата Сообщение от Segera Посмотреть сообщение
в течении двух с половиной - трех часов
---
Цитата Сообщение от Segera Посмотреть сообщение
проверить на PS 7.1
там как минимум gcim против gwmi сэкономит время раз в 10
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
22.06.2021, 07:06  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
gcim
Это вроде как алиас Get-CimInstance? Он потребует активации WS-Management. Для этого по всем клиентам ещё надо работать. В чем-то мешают ведомственные и организационные сложности. Далекие от ОС.
В целом да. Быстрее, но не в разы. Чаще срабатывает GWMI.
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
22.06.2021, 10:35
Цитата Сообщение от Segera Посмотреть сообщение
GWMI
Его нет в PowerShell 7
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
22.06.2021, 11:51
Цитата Сообщение от Segera Посмотреть сообщение
Чаще срабатывает GWMI
ощущение ремонта старого автомобиля человеком который не сильно в этом и понимает
если уже ухОдите в дебри своего кода и как видно, косяки там есть, то не проще озвучить задачу, которую решаете, возможно вам напишут код - правильный, а на основании его доучите чего не знали и допилите до желаемых хотелок.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
22.06.2021, 19:03  [ТС]
2 alpap
месседж от кого-то, кто знает всё? Да, многое с полгода практики. Скажем так в 2020 не было подобных задач, хотя на этом месте более 25 лет.
Да, согласен. Взгляд со стороны вполне может подсказать, вообще всё не так.
Начало вопроса тут Win32_PingStatus есть варианта для списка компьютеров? Для определения Resolved
В кратце. Надо найти имена компьютеров одного леса ( AD, 1*DHCP, 4*DNS, 4*DC ), для которых обозначена тема
"Ошибка "Не удалось установить доверительные отношения между этой рабочей станцией и основным доменом" при выполнении входа в Windows 7"
где вариантов не так много. Если не надеяться на рабочие варианты, без секундного апгрейда примерно 500 хостов.
Конечно, работают команды
Code
1
2
3
4
5
NlTest /QUERY
NlTest /SC_VERIFY:my.domain.com
NlTest /SC_Change_PWD:my.domain.com
NlTest /SC_Reset:my.domain.com
TimeOut /T 13
к сожалению не на всех компах. вторая сложность, все компы не обойти, и есть такие, к которым физический доступ оооочень сложен.
что требуется и хотелось бы сделать. При этом надо понимать. Это задача не критического значения. Да, есть сотни компов, которые не имеют доступа по управлению. Это удивительно, но для них работают многие GPO простого значения. подключение сетевого диска, раздачи ярлыков, изменения трастовых сайтов в IE и ещё многое. Но также многое не работает. Например, некоторые службы, активация брандмауэра, WinRM. Во всяком случае GPResult /h c:\gp-report\report.html /f голосуют именно за это.
Где сложность?
1. всех руководителей не достать, что бы они на местах дали нужные указания. Могут дать указание на что-то конкретное, а не давайте мы тут подумаем что у нас творится. Эти дебаты ни к чему хорошему не приведут, что не раз случалось.
2. есть компы, которые не включаются штатно. Они не входят в проблемную группу. Командировки, отпуск, сданы в архив или тупо не исправны.
3. надо отфильтровать компы п.2 от проблемных, которые в работе. Это можно сделать:
3.1. колонками в .CSV
"Ориент.последняя дата логона" = $Os.LastLogonDate
"Долгое Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus
3.2 более надежно, считывание даты продления аренды в DHCP. В текстовом формате более менее работает, но при экспорте в .CSV получается много мусора. Но это хорошее использование. Пока тестим.
Итак найти и выдать в работу, те. кому надо ЦУ, список компов, которые находятся в разделе "Ошибка "Не удалось установить доверительные отношения ...".
Не исключено такой список будет пополняться. по мере активации и включении.
Частично причина этого косяка, к которому надо относиться как к внезапному созданию временного профиля C:\User\TEMP, в обновлении для домен-контроллеров "Критическая уязвимость Active Directory Zerologon (CVE-2020-1472)" и её результаты для некоторых компов. Этот апдейт удалить нельзя. К сожалению.
Были они проблемные и даже можете кинуть помидоры, пиратки, это уже без смысла обсуждать.
Вот как бы небольшие активы темы. Извините за много букв, даже если извинение повторное. Но короче не получается.
Повторюсь, ситуация не критически-катастрофическая .Но делать что-то надо. Хотя что бы не возникали разные чины.
Пысы. Да, совет бегом увольняться, мне известен. Будем считать мне его уже выдали.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
22.06.2021, 23:02
Цитата Сообщение от Segera Посмотреть сообщение
месседж от кого-то, кто знает всё?
отнюдь нет, возможно даже менее вашего, просто прямолинейный взгляд со стороны и ничего личного.
из (таки да)
Цитата Сообщение от Segera Посмотреть сообщение
много букв
и ссылок я пока вижу основную проблему - вывод в CSV? Или все же основное - проблема определять отклик компов? Надо начать с чего-то с одной стороны малого (или единичного), но важного, после чего можно двигаться в нужном направлении.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
23.06.2021, 08:54  [ТС]
нет, как таковых критичных проблем нет. Более-менее понятно, откуда пошли НЕ ... установить доверительные отношения, что с этим делать ( хотя вопрос открытый и рекомендации от MS мягко говоря странные, есть примеры решения, но не работают для всех ). Для того чтобы делать, надо составить список проблемных хостов. Можно порадоваться, это не сервера, но среди есть немало от рукодства, бухни и другой публики, с которой по этому поводу не хочется общаться. С их выявлением вполне справляется
PowerShell
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
Import-module ActiveDirectory
 
# Workflow PingStatus
Function PingStatus
{
   param([string[]]$Computers)
 
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
$PathOutCSV = "\\Server\....\ArmPingStatusWorkFlow-$NowTime.csv"
 
ForEach ($Computer in $Computers)   
{
#    -Parallel  Sequence    {         
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
# $User = (GWMI -ComputerName $Computer -Class Win32_ComputerSystem)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
                        
 $output = [ordered]@{
           "Имя Компьютера" = $Computer
#             "Имя пользователя" = $User.UserName
             "Операционная система" = $Os.OperatingSystem
            "IPV4Address" = $Result.IPV4Address            
            "ProtocolAddressResolved" = $Result.ProtocolAddressResolved
            "Доступ" = $Ping
            "Обновление порядкого номера" = $Os.uSNCreated                                
            "Ориент.последняя дата логона" = $Os.LastLogonDate
            "Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                              
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOutCSV -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
 
#                        }
 
 
                }
}
 
 
# $Computers = (Get-ADComputer -Filter *).Name | Sort-Object #  -Descending All Hosts Servers Computers On increasing По нарастающей в имени компьютера
$Computers = GC -Path F:\.....\Script\ArmComp2.txt | Sort-Object
PingStatus -Computer $Computers
Приведен для варианта PShell 7.1 и укороченного списка из 10 хостов. Для варианта PShell 5.1 перевести в коммент функцию и разблокировать Workflow PingStatus, соответственно -Parallel Sequence на свои места. Время для всего списка на PShell 7.1 и функции больше на час-полтора, чем если использовать Workflow.
Т.е. WFW реально в интервале PShell 3.0-5.1 работает, как это анонсировано Сергеем Васиным еще в 2013-м в статье PowerShell WorkFlows: Основы ...
Конечно надо найти оптимальные вложения блоков. Не исключено отказаться от строк или запустить другим скриптом, которые тянут много времени. Конечно это определение версии оси и имени пользователя.
Почему сделал темы и вопрос. Был удивлен, рабочие скрипты в PShell 3.0-5.1 выдают ответ, если стартовать в PShell 7.1:
PS F:\...> .\1PingStatusARMWorkFlowCSV2113.ps1
ParserError: F:\Publ\MS\Script\Test\Script\1PingStatu sARMWorkFlowCSV2113.ps1:3
Line |
3 | Workflow PingStatus
| ~~~~~~~~~~~~~~~~~~~
| Workflow is not supported in PowerShell 6+.
Как уже заметил , Function работает, но значительно с большим временем, чем WFW в PS 5.1
Ещё в PS 7.1 не пошла кодировка. Если заглавия перевести в LAT - проблема решена. Если на CYR, ответ:
��� ���������� : Comp0430
������������ ������� : Windows 7 Профессиональная
IPV4Address :
ProtocolAddressResolved :
������ :
���������� ��������� ������ : 33833
������.��������� ���� ������ : 17.06.2021 6:32:17
���������� ������� :

��� ���������� : Comp0807
������������ ������� : Windows 7 Профессиональная
IPV4Address :
ProtocolAddressResolved :
������ :
���������� ��������� ������ : 33678
������.��������� ���� ������ : 21.06.2021 9:19:15
���������� �������
Понятно, переправить 5-7 заглавий - меньшая проблема, чем искать другие пути для WFW в PShell 7.1. Пока не понятно, они точно есть, если прочитать хелпер, который в первом посте Breaking Changes for PowerShell 6.x
Идея для PS 5.1 WorkFlow PingStatus ....{...} PingStatus -Computer $Computers - рабочая.

Добавлено через 28 минут
Еще сл. странности из неожиданных, PShell 7.1 не понимает алиас GWMI. Если перевести в Get-WmiObject - работает. Установлен с .msi
Также, не принимает строку, если содержит кириллицу на локализованной WStation. Т.е. строка $Ping = ping $Computer -n 1 -l 1 | Select-String "потерь" тут бесполезна. Поэтому надо запускать на LAT локализации. Может это вариант, если PShell 7.1+Function будет быстрее, чем PS 5.1 + WorkFlow. Это странно, последние сервера куплены и внедрены локализованные CYR.

Добавлено через 19 минут
строки в PS 7.1
$Os = (Get-ADComputer -Identity $Computer -Properties *)
...."OS" = $Os.OperatingSystem
выдают результат
Windows 10 Корпоративная 2016 с долгосрочным обслуживанием
а надо бы, как в PS 5.1
Windows 10 Корпоративная 2016 с долгосрочным обслуживанием
похоже с 7-кой пока рановато что-то использовать.
Понимаю слова из рекламы, "вы не умеете их готовить". Но пока умею 5.1. Почему б этим не порадоваться. ;-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2021, 08:54
Помогаю со студенческими работами здесь

windows foundation presentation
Ребят , подскажите , можно ли пользоваться windows foundation presentation совместно с C и C++ или такая возможность есть только на C# ?...

Приговор Windows Communication Foundation
когда возникает вопрос в других темах - в течение получаса получаешь несколько вариантов ответов, какую-то помощь или просто мнение. здесь...

USB flash на Windows server 2008 R2 Foundation
Перестали работать USB флэшки. Флэшки определяются как дисковые устройства в диспетчере, как и должны, но в состояние устройства - Не...

Ошибка при установке Windows Identity Foundation
при установке Windows Identity Foundation на WS 2012 выводит ошибку 0x80096002 &quot;Недопустимый сертификат лица, подписавшего сообщений...

ошибка проверки лицензии в windows foundation server 2012
Есть windows foundation server 2012, при установки был введен официальный ключ и все работало без проблем, но после переезда в новый офис и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru