none
Помогите со скриптом RRS feed

  • Вопрос

  • Добрый день дамы и господа!!!

    Есть txt файл вида:

    off-xxxx

    off-yyyy и т.д.

    Необходимо скриптом "выкусывать" цифры из имени машин.Буду благодарен за любую помосчь!!!


    • Изменено Igor3000 18 сентября 2012 г. 5:46
    18 сентября 2012 г. 5:46

Ответы

  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file "name.txt
    }
     

    Все должно быть в блоке Foreach.

    Всё равно выдаёт:


    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file c:\temp\name.txt


    Потому что { на следующей строке находится,а не вместе с Foreach.

    PS. Забыл добавить параметр -Append к  Out-File.

    Тут дело вот в чём.Мне нужно будет потом передать эти имя пользователя и имя компа в апдейт вида:

    $qry = "update rabmest set laddr = '$ComputerName' where npolz = '$UserName'"

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

    Так ничего не меняется.

    gc res.txt | Foreach {
    	$ComputerName = $_
    	$UserName = $_.split("-")[1]
    	$qry = "update rabmest set laddr = '$ComputerName' where npolz = '$UserName'" 
    	$qry
    }
    
    
    Вывод:
    update rabmest set laddr = 'PCX3-1932' where npolz = '1932'
    update rabmest set laddr = 'PCZ4-1123' where npolz = '1123'

    • Помечено в качестве ответа Igor3000 18 сентября 2012 г. 10:41
    18 сентября 2012 г. 10:08
    Отвечающий

Все ответы

  • День добрый

    "off-1232123.txt" -match "(\d)+"

    $matches[0]


    Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам помогли.

    18 сентября 2012 г. 5:51
  • День добрый

    "off-1232123.txt" -match "(\d)+"

    $matches[0]


    Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам помогли.

    Это конечно же хорошо но я наверное забыл упамянуть,что и в имени могут содержаться цифры.Фактически мне нужны цифры после тире.На выходе мне хотелось бы получить две переменные:

    $name - собственно цифры после тире и

    $compname - исходное имя компьютера.

    18 сентября 2012 г. 6:39
  • Если после тире находятся всегда цифры,то можно:

    PS > gc res.txt  | select @{n="CompName";e={$_.split("-")[0]}},@{n="Name";e={$_.split("-")[1]}}
    
    CompName                                                    Name
    --------                                                    ----
    PCX3                                                        1932
    PCZ4                                                        1123

    18 сентября 2012 г. 6:52
    Отвечающий
  • Если после тире находятся всегда цифры,то можно:

    PS > gc res.txt  | select @{n="CompName";e={$_.split("-")[0]}},@{n="Name";e={$_.split("-")[1]}}
    
    CompName                                                    Name
    --------                                                    ----
    PCX3                                                        1932
    PCZ4                                                        1123


    Почти то что нужно!НО!!! CompName содуржит только буквы а мне необходимо чтобы он оставлял имя без изменений
    18 сентября 2012 г. 7:08
  • gc res.txt  | select @{n="CompName";e={$_}},@{n="Name";e={$_.split("-")[1]}}

    18 сентября 2012 г. 7:11
    Отвечающий
  • $Machines = @{}
    gc res.txt | foreach { 
    	if ($_ -match "(\S+)-(\d+)") {
    		$Machines.Add($matches[0],$matches[2])
    	}
    }
    $Machines

    Это если через hash-table

    Грамотная постановка вопроса - уже 50% решения. Не забывайте помечать ответы как полезные или как ответ, если они Вам помогли.

    18 сентября 2012 г. 7:15
  • gc res.txt  | select @{n="CompName";e={$_}},@{n="Name";e={$_.split("-")[1]}}

    Это то что нужно!
    Извените за глупый вопрос,но как результат селекта присвоить переменным  $name и $compname?Этот скрипт просто выплёвывает результат на экран,а мне хотелось бы получить две переменные:

    $name - собственно цифры после тире и

    $compname - исходное имя компьютера.

    Они мне  понадобятся для дальнейшей работы.

    18 сентября 2012 г. 7:37
  • Можно допилить чуть-чуть скрипт Kazun'a:

    gc res.txt  | select @{n="CompName";e={$_}},@{n="Name";e={$_ -replace ".*-"}}

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    18 сентября 2012 г. 7:40
  • gc res.txt  | select @{n="CompName";e={$_}},@{n="Name";e={$_.split("-")[1]}}

    Это то что нужно!
    Извените за глупый вопрос,но как результат селекта присвоить переменным  $name и $compname?Этот скрипт просто выплёвывает результат на экран,а мне хотелось бы получить две переменные:

    $name - собственно цифры после тире и

    $compname - исходное имя компьютера.

    Они мне  понадобятся для дальнейшей работы.

    Тогда лучше использовать Foreach:

    gc res.txt | Foreach {
    	$compname = $_
    	$name = $_.split("-")[1]
    	"Тут требуемый код"
    }

    18 сентября 2012 г. 7:40
    Отвечающий
  • gc res.txt  | select @{n="CompName";e={$_}},@{n="Name";e={$_.split("-")[1]}}

    Это то что нужно!
    Извените за глупый вопрос,но как результат селекта присвоить переменным  $name и $compname?Этот скрипт просто выплёвывает результат на экран,а мне хотелось бы получить две переменные:

    $name - собственно цифры после тире и

    $compname - исходное имя компьютера.

    Они мне  понадобятся для дальнейшей работы.

    Тогда лучше использовать Foreach:

    gc res.txt | Foreach {
    	$compname = $_
    	$name = $_.split("-")[1]
    	"Тут требуемый код"
    }

    При выполнении скрипта:

    gc res.txt | Foreach {
    $compname
    = $_
    $name
    = $_.split("-")[1]
     
    }

    $name|out-file name.txt

    Выдаёт:

    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

        $compname = $_
        $name = $_.split("-")[1]  

    При этом создаёт пустой файл name.txt


    • Изменено Igor3000 18 сентября 2012 г. 8:05
    18 сентября 2012 г. 8:04
  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file name.txt
    }
     

    Все должно быть в блоке Foreach.
    • Изменено KazunEditor 18 сентября 2012 г. 8:10
    18 сентября 2012 г. 8:06
    Отвечающий
  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file "name.txt
    }
     

    Все должно быть в блоке Foreach.

    Всё равно выдаёт:


    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file c:\temp\name.txt


    18 сентября 2012 г. 8:17
  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file "name.txt
    }
     

    Все должно быть в блоке Foreach.

    Всё равно выдаёт:


    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file c:\temp\name.txt


    Потому что { на следующей строке находится,а не вместе с Foreach.

    PS. Забыл добавить параметр -Append к  Out-File.

    18 сентября 2012 г. 8:22
    Отвечающий
  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file "name.txt
    }
     

    Все должно быть в блоке Foreach.

    Всё равно выдаёт:


    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file c:\temp\name.txt


    Потому что { на следующей строке находится,а не вместе с Foreach.

    PS. Забыл добавить параметр -Append к  Out-File.

    Тут дело вот в чём.Мне нужно будет потом передать эти имя пользователя и имя компа в апдейт вида:

    $qry = "update rabmest set laddr = '$ComputerName' where npolz = '$UserName'"

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

     

    18 сентября 2012 г. 10:00
  • gc res.txt | Foreach {
     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file "name.txt
    }
     

    Все должно быть в блоке Foreach.

    Всё равно выдаёт:


    cmdlet ForEach-Object at command pipeline position 2
    Supply values for the following parameters:
    Process[0]:

     $compname = $_
     $name = $_.split("-")[1]
     $name|out-file c:\temp\name.txt


    Потому что { на следующей строке находится,а не вместе с Foreach.

    PS. Забыл добавить параметр -Append к  Out-File.

    Тут дело вот в чём.Мне нужно будет потом передать эти имя пользователя и имя компа в апдейт вида:

    $qry = "update rabmest set laddr = '$ComputerName' where npolz = '$UserName'"

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

    Так ничего не меняется.

    gc res.txt | Foreach {
    	$ComputerName = $_
    	$UserName = $_.split("-")[1]
    	$qry = "update rabmest set laddr = '$ComputerName' where npolz = '$UserName'" 
    	$qry
    }
    
    
    Вывод:
    update rabmest set laddr = 'PCX3-1932' where npolz = '1932'
    update rabmest set laddr = 'PCZ4-1123' where npolz = '1123'

    • Помечено в качестве ответа Igor3000 18 сентября 2012 г. 10:41
    18 сентября 2012 г. 10:08
    Отвечающий