none
Условие для выполнения скрипта

    Вопрос

  • Скрипт отрабатывает только если поля homephone и mobile имеют телефоны, однако если хотя бы одно поле пустое, то он не отрабатывает, может как то подправить регулярное выражение или лучше добавить условия if, else ?
    Get-ADUser -SearchBase "DC=mydomain,DC=local" -Filter * -properties homephone, mobile | Foreach {
    # ALL
    $homephone = $_.homephone -replace "\D"
    $mobile = $_.mobile -replace "\D"

    # RU
    $mobile = $mobile -replace '^8(\D{10})$','7$1'
    $homephone = $homephone -replace '^8(\D{10})$','7$1'
    Set-ADUser $_ -mobilephone $mobile -homephone $homephone
    }
    13 сентября 2017 г. 9:47

Ответы

  • Get-ADUser -SearchBase "DC=mydomain,DC=local" -Filter * -properties homephone, mobile | Foreach {
    	if($_.homephone)
    	{
    		$homephone = $_.homephone -replace "\D" -replace '^8(\d{10})$','7$1'
    		Set-ADUser $_  -homephone $homephone
    	}
    
    	if($_.mobile)
    	{
    		$mobile = $_.mobile -replace "\D" -replace '^8(\d{10})$','7$1' 
    		Set-ADUser $_ -mobilephone $mobile 
    	}
    }


    • Изменено KazunEditor 13 сентября 2017 г. 10:57 \D > \d
    • Предложено в качестве ответа Vector BCOModerator 14 сентября 2017 г. 9:37
    • Помечено в качестве ответа KazunEditor 15 сентября 2017 г. 5:44
    13 сентября 2017 г. 10:07
    Отвечающий
  • может перед Set-ADUser как то так:

    if ($mobile -match "{0-9}" -or $homePhone -match "{0-9}")
    {
    Set-ADUser $_ -homephone $homephone -mobilePhone $mobile
    }
    else {break;}
    }

    но почему то не отрабатывает.

    Вы делаете что то странное, во первых проверить что REGEXP не работает не сложно

    $mobile = 11
    $mobile -match "{0-9}"

    Во вторых диапазоны задаются в квадратных кавычках [0-9], + Ваше требование словами звучит так "должна содержаться хотя-бы одна цифра", то-есть "фыв123фыв" полностью отвечает запросу

    В третьих сложные условия стоит заключать в скобки

    IF ((Первое Условие) -or (Второе Условие)){...}

    У Вас в примере количество фигурных скобок сильно много и непарное количество

    Ну и главное Ваш вопрос гуглится довольно просто

    $replace = @{}
    if (! ([string]::IsNullOrEmpty("$homephone"))){
       $replace['homephone'] = "$homephone"
    } # End If
    if (! ([string]::IsNullOrEmpty("$mobile"))){
       $replace['mobilePhone'] = "$mobile"
    } # End If
    Set-ADUser $_ -Replace $replace


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 13 сентября 2017 г. 10:09
    • Предложено в качестве ответа Vector BCOModerator 14 сентября 2017 г. 9:37
    • Помечено в качестве ответа KazunEditor 15 сентября 2017 г. 5:44
    13 сентября 2017 г. 10:07
    Модератор

Все ответы

  • может перед Set-ADUser как то так:

    if ($mobile -match "{0-9}" -or $homePhone -match "{0-9}")
    {
    Set-ADUser $_ -homephone $homephone -mobilePhone $mobile
    }
    else {break;}
    }

    но почему то не отрабатывает.

    13 сентября 2017 г. 9:50
  • может перед Set-ADUser как то так:

    if ($mobile -match "{0-9}" -or $homePhone -match "{0-9}")
    {
    Set-ADUser $_ -homephone $homephone -mobilePhone $mobile
    }
    else {break;}
    }

    но почему то не отрабатывает.

    Вы делаете что то странное, во первых проверить что REGEXP не работает не сложно

    $mobile = 11
    $mobile -match "{0-9}"

    Во вторых диапазоны задаются в квадратных кавычках [0-9], + Ваше требование словами звучит так "должна содержаться хотя-бы одна цифра", то-есть "фыв123фыв" полностью отвечает запросу

    В третьих сложные условия стоит заключать в скобки

    IF ((Первое Условие) -or (Второе Условие)){...}

    У Вас в примере количество фигурных скобок сильно много и непарное количество

    Ну и главное Ваш вопрос гуглится довольно просто

    $replace = @{}
    if (! ([string]::IsNullOrEmpty("$homephone"))){
       $replace['homephone'] = "$homephone"
    } # End If
    if (! ([string]::IsNullOrEmpty("$mobile"))){
       $replace['mobilePhone'] = "$mobile"
    } # End If
    Set-ADUser $_ -Replace $replace


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 13 сентября 2017 г. 10:09
    • Предложено в качестве ответа Vector BCOModerator 14 сентября 2017 г. 9:37
    • Помечено в качестве ответа KazunEditor 15 сентября 2017 г. 5:44
    13 сентября 2017 г. 10:07
    Модератор
  • Get-ADUser -SearchBase "DC=mydomain,DC=local" -Filter * -properties homephone, mobile | Foreach {
    	if($_.homephone)
    	{
    		$homephone = $_.homephone -replace "\D" -replace '^8(\d{10})$','7$1'
    		Set-ADUser $_  -homephone $homephone
    	}
    
    	if($_.mobile)
    	{
    		$mobile = $_.mobile -replace "\D" -replace '^8(\d{10})$','7$1' 
    		Set-ADUser $_ -mobilephone $mobile 
    	}
    }


    • Изменено KazunEditor 13 сентября 2017 г. 10:57 \D > \d
    • Предложено в качестве ответа Vector BCOModerator 14 сентября 2017 г. 9:37
    • Помечено в качестве ответа KazunEditor 15 сентября 2017 г. 5:44
    13 сентября 2017 г. 10:07
    Отвечающий
  • И еще один момент

    PS> $mobile = 81234561234
    PS> $mobile -replace '^8(\D{10})$','7$1'
    81234561234
    
    
    PS> $mobile -replace '^8(\d{10})$','7$1'
    71234561234


    The opinion expressed by me is not an official position of Microsoft


    13 сентября 2017 г. 10:19
    Модератор