Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как удалить мусор из переменной? (http://forum.oszone.net/showthread.php?t=316658)

Luka666 11-07-2016 12:14 2649759

Как удалить мусор из переменной?
 
Привет всем! Подскажите пожалуйста как удалить лишние символы из переменной?
К примеру, у меня в скрипте Powershell, создаётся текстовая переменная: $username c текстом:

REGIONS\i2803-04-113
REGIONS\i2803-04-126
REGIONS\i2803-04-156

Ну а мне совершенно не нужно слово REGIONS\ а нужно просто:
i2803-04-113
i2803-04-126
i2803-04-156

Как убрать лишнее из переменной? Ну или создать новую, уже без лишних символов? Помогите чайнику, заранее спасибо.

greg zakharov 11-07-2016 12:39 2649780

Что значит текстовая переменная? Может все же переменная, содержащая объект типа строка?
Код:

PS E:\> $username.GetType()
IsPublic IsSerial Name                                    BaseType
-------- -------- ----                                    --------
True    True    String                                  System.Object

Тогда самый простой способ:
Код:

PS E:\> $username -replace 'regions\\', ''
i2803-04-113
i2803-04-126
i2803-04-156

Этот же прием работает, если переменная является массивом строк, например.

Luka666 11-07-2016 13:23 2649804

Цитата:

Цитата greg zakharov
Тогда самый простой способ:
Код: Выделить весь код
PS E:\> $username -replace 'regions\\', ''
i2803-04-113
i2803-04-126
i2803-04-156
Этот же прием работает, если переменная является массивом строк, например. »

Спасибо очень выручил. А у мну не получалось потому-что я вводил: $username -replace "regions\" .

Мне бы ещё убрать лишнее со строковой переменной.

DisplayName
----------------
Петров Пётр Петрович

Ещё раз спасибо!

greg zakharov 11-07-2016 13:52 2649819

Так как я не в курсе как именуется у Вас переменная на сей раз, а также действительно ли переменная хранит строку, а не какой иной объект, можно поступить так:
Код:

$a.Substring(($$=[Regex]::Match($a, '\p{IsCyrillic}').Index), $a.Length - $$)
$a - переменная, в которой хранится строка, т.е. при попытке узнать тип переменной в хост будет возвращено следующее:
Код:

PS E:\> $a.GetType().Name
String

С помощью типа Regex находим индекс первого кириллического символа в строке, а далее методом Substring извлекаем нужную нам подстроку. Можно, конечно, сделать проще, но, повторяюсь, не в курсе, что действительно у Вас за переменная.

Luka666 11-07-2016 15:02 2649845

Не прокатило.

Произошла ошибка при вызове метода, так как [Selected.Microsoft.ActiveDirectory.Management.ADUser] не с
одержит метод с именем "Substring".
строка:1 знак:21
+ $username2.Substring <<<< (($$=[Regex]::Match($username, '\p{IsCyrillic}').Index), $username2.length
- $$)
+ CategoryInfo : InvalidOperation: (Substring:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound


У меня переменная получается путём извлечения из AD нужного объекта:


$computer = "i2803-w04095"

$username = (get-wmiobject -ComputerName $computer win32_computerSystem).Username

$username = $username -REPLACE 'REGIONS\\', ''

$username2 = get-aduser $username -Properties displayname|select-object DisplayName


т.е извлечения полного выводимого имени из юзерской учётки в AD. Для того, чтоб вставить его в описание учётной записи компьютора на котором этот юзер залогинен в данный момент.

Set-ADComputer $computer -Description "$username2"

Но так, как переменная $username2 содержит запись в виде строки:

DisplayName
----------------
Петров Пётр Петрович

В описание учётки рабочей станции записывается: @{DisplayName=Петров Пётр Петрович}
А мне надо только " Петров Пётр Петрович " (без кавычек). Для этого полагаю что в переменной $username2 текст должен быть такой-же "чистый" в виде текста, безо всего лишнего.

Как это сделать?

greg zakharov 11-07-2016 16:06 2649867

Цитата:

Цитата Luka666
Но так, как переменная $username2 содержит запись в виде строки...

Хост Вам дал четко понять, что объект в переменной является типом [Selected.Microsoft.ActiveDirectory.Management.ADUser], а не строкой, именно поэтому Вам уже намекалось неоднократно - смотрите на возвращаемый тип с помощью невиртуального метода GetType, большинство ненужных вопросов отпадут сами по себе.
Цитата:

Цитата Luka666
В описание учётки рабочей станции записывается: @{DisplayName=Петров Пётр Петрович}

Если для Вас Hashtable -eq String, то Вам лучше сперва отправиться на MSDN или почитать встроенную справку.
Код:

PS E:\> $a = @{UserName='Гнутха Йынлоп'}
PS E:\> $a.UserName
Гнутха Йынлоп

В общем, читайте указанные ресурсы до просветления.

Luka666 11-07-2016 19:49 2649929

Всё. Дошло. Благодарю за терпение. Будем пытаться и дальше познавать PS. :pray: :up :up :up


Время: 01:06.

Время: 01:06.
© OSzone.net 2001-