Показать полную графическую версию : [решено] Как удалить мусор из переменной?
Привет всем! Подскажите пожалуйста как удалить лишние символы из переменной?
К примеру, у меня в скрипте 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
Что значит текстовая переменная? Может все же переменная, содержащая объект типа строка?
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
Этот же прием работает, если переменная является массивом строк, например.
Тогда самый простой способ:
Код: Выделить весь код
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
Так как я не в курсе как именуется у Вас переменная на сей раз, а также действительно ли переменная хранит строку, а не какой иной объект, можно поступить так:
$a.Substring(($$=[Regex]::Match($a, '\p{IsCyrillic}').Index), $a.Length - $$)
$a - переменная, в которой хранится строка, т.е. при попытке узнать тип переменной в хост будет возвращено следующее:
PS E:\> $a.GetType().Name
String
С помощью типа Regex находим индекс первого кириллического символа в строке, а далее методом Substring извлекаем нужную нам подстроку. Можно, конечно, сделать проще, но, повторяюсь, не в курсе, что действительно у Вас за переменная.
Не прокатило.
Произошла ошибка при вызове метода, так как [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
Но так, как переменная $username2 содержит запись в виде строки...Хост Вам дал четко понять, что объект в переменной является типом [Selected.Microsoft.ActiveDirectory.Management.ADUser], а не строкой, именно поэтому Вам уже намекалось неоднократно - смотрите на возвращаемый тип с помощью невиртуального метода GetType, большинство ненужных вопросов отпадут сами по себе.
В описание учётки рабочей станции записывается: @{DisplayName=Петров Пётр Петрович}Если для Вас Hashtable -eq String, то Вам лучше сперва отправиться на MSDN или почитать встроенную справку.
PS E:\> $a = @{UserName='Гнутха Йынлоп'}
PS E:\> $a.UserName
Гнутха ЙынлопВ общем, читайте указанные ресурсы до просветления.
Всё. Дошло. Благодарю за терпение. Будем пытаться и дальше познавать PS. :pray: :up :up :up
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.