Компьютерный форум 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=351270)

Udar_Nick 24-05-2022 15:56 2985634

Записать данные в файл
 
Приветствую уважаемый форум и прошу помощи!

Powershell - Не могу справится самостоятельно с простой задачкой.

Есть переменная $s, содержащая массив данных
Код:


$s.GetType().FullName
System.Object[]

Name                          Value                                               
----                          -----                                               
LeftScanerIP                  192.168.17.66                                       
LeftScanerPort                5000                                                 
RigthScanerIP                  192.168.17.67                                       
RigthScanerPort                5000

Задача записать это в текстовый файл в виде:
Код:

LeftScanerIP:192.168.17.66                                       
LeftScanerPort:5000                                                 
RigthScanerIP:192.168.17.67                                       
RigthScanerPort:5000

Помогите, пожалуйста!
Заранее спасибо всем откликнувшимся!

DJ Mogarych 24-05-2022 16:23 2985641

Примерно так:
Код:

$s |% {"$($_.name):$($_.value)"} > "D:\temp\output.txt"

Udar_Nick 24-05-2022 16:27 2985644

Цитата:

Цитата DJ Mogarych
Примерно так: »

У меня только двоеточия в файл выдает:
Код:

PS C:\temp> $s

Name                          Value                                               
----                          -----                                               
LeftScanerIP                  192.168.17.66                                       
LeftScanerPort                5000                                                 
RigthScanerIP                  192.168.17.67                                       
RigthScanerPort                5000           

PS C:\temp> $s | % {"$($_.name):$($_.value)"}
:
:
:
:
:
:
:
:
:
:


DJ Mogarych 24-05-2022 16:38 2985648

А что выдаёт
Код:

$s.Name
?

Udar_Nick 24-05-2022 16:41 2985650

Цитата:

Цитата DJ Mogarych
А что выдаёт
Код:
$s.Name »

Ничего:
Код:

PS C:\temp> $s.Name

PS C:\temp>


DJ Mogarych 24-05-2022 16:46 2985651

Видимо, в переменной содержатся какие-то неструктурированные данные. Откуда данные в неё попали?

Так выдаёт что-нибудь?
Код:

$s |sls "ip|port"

Udar_Nick 24-05-2022 16:52 2985652

Цитата:

Цитата DJ Mogarych
Так выдаёт что-нибудь? »

нет
Цитата:

Цитата DJ Mogarych
Видимо, в переменной содержатся какие-то неструктурированные данные. Откуда данные в неё попали? »

Код:

$ConfigFile = $PSScriptRoot + "\settings1.ini"

Function ReadSettings ($ConfigFile){
$settings = (Get-Content $ConfigFile) -replace ":","=" | ConvertFrom-StringData
 return $settings
}
$s = ReadSettings $ConfigFile

settings1.ini выглядит так:
Код:

LeftScanerIP:192.168.17.66
LeftScanerPort:5000
RigthScanerIP:192.168.17.67
RigthScanerPort:5000


DJ Mogarych 24-05-2022 17:13 2985655

Ясно.

Код:

$s |% {"$($_.keys):$($_.values)"} > "D:\temp\output.txt"

Udar_Nick 24-05-2022 19:01 2985666

Цитата:

Цитата DJ Mogarych
$s |% {"$($_.keys):$($_.values)"} »


Спасибо! Так заработало

Udar_Nick 25-05-2022 09:48 2985693

Еще раз прошу помощи, так как не знаю/не получается

Есть файл settings.ini
В скрипте открывается форма с полями, которые заполняются значениями, считываемыми из этого файла.
Я меняю какое-либо из значений поля(ей) и мне надо по нажатии кнопки "Записать" записать все значения полей (измененные и нет) в тот же файл.
Не пойму как обновить значение переменной после изменения значения соответствующего поля?

Код:

Function ReadSettings ($ConfigFile){
$settings = (Get-Content $ConfigFile) -replace ":","=" | ConvertFrom-StringData
 return $settings
}
Function WriteSettings ($ConfigFile) {
$s | ForEach {"$($_.Keys):$($_.Values)"} > $ConfigFile
}

## Форма
Add-Type -assembly System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$main_form = New-Object System.Windows.Forms.Form
$main_form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedToolWindow
$main_form.StartPosition = 'CenterScreen'
$main_form.Width = 500
$main_form.Height = 700
$main_form.AutoSize = $false
# Текстовое поле с изменяемым значением
$LeftScanerIP = New-Object System.Windows.Forms.TextBox
$LeftScanerIP.Location  = New-Object System.Drawing.Point(85,20)
$LeftScanerIP.Size = New-Object System.Drawing.Size(130,20)

$LeftScanerIP.Text = $settings.LeftScanerIP # переменная, которую считали из settings.ini

$GroupBoxLeft.Controls.Add($LeftScanerIP)
# Кнопка
$WriteSettings = New-Object System.Windows.Forms.Button
$WriteSettings.Text = 'Записать'
$WriteSettings.Location = New-Object System.Drawing.Point(100,460)
$WriteSettings.Size = New-Object System.Drawing.Size(160,40)
# Действие по нажатию кнопки
$WriteSettings.Add_Click({WriteSettings $ConfigFile})


Serguei Kouzmine 28-05-2022 08:16 2985853

правильно наверное вот так


Код:

$text_fragment = @'
Path =  filename.txt
Folder = -
Size = 3
Packed Size = 3
Created =
Accessed =
Attributes = A
Encrypted = -
Solid = -
Commented = -
Split Before = -
Split After = -
Host OS = Win32
Method = m0:22
Version = 29

'@


function ReadSettings {
param (
  [String]$text_fragment
)

$settings = $text_fragment | ConvertFrom-StringData
 return $settings
}

$settings = ReadSettings -text_fragment $text_fragment

$settings.GetEnumerator() | foreach-object {

write-output ('{0} = {1}' -f $_.Key, $_.Value)
# в этом месте доступен каждый ключ и значение
}



Время: 23:49.

Время: 23:49.
© OSzone.net 2001-