MsAnastasiia
@MsAnastasiia
Девочка.

Где ошибка в цикле PowerShell?

function InstallNASDrive { net use N: $NASDrive /persistent:Yes }
function InstallNettopDrive { net use N: $NettopDrive /persistent:Yes }

if ( $CompName -eq 'NETTOP-SQUARE' ){ 
    Write-Host $CompName 
}
    #   Map NAS Drive 

    Do 
{
    $NetDriveName = Get-CimInstance -classname Win32_NetworkConnection | select-object -expandproperty "RemoteName"
    if (([bool] ($null)) -eq $NetDriveName )
                    net use N: $NASDrive /persistent:Yes
}
Until (([bool]( $NetDriveName -contains $NASDrive  )))

else 
    {
        Write-Host "Map Network Drive"
    }
    #   Map NAS &  Nettop Drive
    InstallNettopDrive
    Start-Sleep -Seconds 2
    InstallNASDrive


Ошибка:

char:44
+ if (([bool] ($null)) -eq $NetDriveName )
+ ~
Missing statement block after if ( condition ).
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingStatementBlock
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
Alex_Geer
@Alex_Geer
System Engineer
Чтобы исправить эту ошибку, необходимо добавить блок операторов после условия if. Например, можно добавить команду Write-Host, которая выведет сообщение в консоль, если условие истинно:
if (([bool] ($null)) -eq $NetDriveName ) {
    Write-Host "NetDriveName is null"
}

Также можно добавить другие команды или вызов функций, которые должны выполниться при истинности условия.
Ответ написан
Комментировать
@MaxKozlov Куратор тега PowerShell
фигурных скобок не хватает вокруг "net use"

а вот так лучше никогда не пишите, это какой-то безумный бред преобразовывать $null в bool, а потом ещё сравнивать со строкой, которая внезапно тоже может быть null
if (([bool] ($null)) -eq $NetDriveName )
достаточно было бы
if (-not $NetDriveName) {
  net use
}


и в цикле то же самое. -contains само по себе возвращает bool, ничего никуда преобразовывать не нужно. в крайнем случае преобразуется неявно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы