Если Вы хотите максимальную пропускную способность, позволяя нескольким читателям читать и только одно устройство записи для записи, BCL имеет что-то названное ReaderWriterLockSlim, который должен помочь сократить код...
К [1 139] подводят итог и дополнение существующие ответы , с Windows PowerShell v5.1 / 7.0.0-preview.4 Ядро PowerShell:
ответ David Mohundro законно точки, что вместо [bool]
параметры необходимо использовать [switch]
параметры в PowerShell, где присутствие по сравнению с отсутствием из имени переключателя (-Unify
указанный по сравнению с [1 141] не указанный) подразумевает свое значение , который заставляет исходную проблему уйти.
Однако при случае Вы, возможно, все еще должны передать переключатель значение явно , особенно при построении командной строки программно :
<час>В Ядре PowerShell , исходная проблема (описанный в [1 132] ответ XLII's Императора ) была , зафиксировал .
таким образом, для передачи $true
явно [switch]
параметр, названный -Unify
, можно теперь записать:
pwsh -File .\RunScript.ps1 -Unify:$true # !! ":" separates name and value, no space
следующие значения могут использоваться: $false
, false
, $true
, true
, но примечание, которое передача 0
или 1
делает не работа.
Примечание, как имя переключателя разделяется от значения с [1 114] и должно быть никакой пробел между двумя.
<глоток> Примечание: Если Вы объявляете [bool]
параметр вместо [switch]
(который Вы обычно не были должны), необходимо использовать тот же синтаксис; даже при том, что -Unify $false
должен работа, она в настоящее время не делает - см. этот выпуск GitHub. глоток>
В [1 182] Windows PowerShell , исходная проблема сохраняется , и - учитывая, что Windows PowerShell активно больше не разрабатывается - вряд ли будет зафиксирован.
обходное решение, предложенное в [1 134] ответ LarsWA - даже при том, что это основано , официальная тема справки с этой записи - делает не работа в v5.1
Используя [1 118] вместо [1 119] единственное эффективное обходное решение :
:: # From cmd.exe
powershell -Command "& .\RunScript.ps1 -Unify:$true"
С [1 120] Вы эффективно передаете часть кода PowerShell , который затем оценен, как обычно - и в PowerShell, передающем $true
и $false
работы (но не true
и false
, как теперь также принято с [1 125]).
Протесты :
Используя [1 126] может привести к дополнительной интерпретации Ваших аргументов, такой, как будто они содержат $
символы. (с [1 128], аргументы литералы ).
Используя [1 129] может привести к другой код выхода .
для получения дополнительной информации, видеть этот ответ и этот ответ .
У меня было что-то подобное при передаче сценария функции с вызывать-командой. Я выполнил команду в одинарных кавычках вместо двойных кавычек, потому что это тогда становится строковым литералом. 'Set-Mailbox $sourceUser -LitigationHoldEnabled $false -ElcProcessingDisabled $true';
В PowerShell булевы параметры могут быть объявлены путем упоминания их типа перед их переменной.
function GetWeb() {
param([bool] $includeTags)
........
........
}
можно присвоить значение передающим $true | $false
GetWeb -includeTags $true