@Apologiz
Разработчик

Как сохранить данные из переменной в файл в названии которого указаны другие переменные?

Доброго всем времени суток.
Возник вопрос, как же всё же вывести данные в файл, в имени которого имеются переменные.
$a = "08"
$b = "04"
$c = "2015"
$data= "111
222
333
444"
$data >> "$a_$b_$c_log.txt"

В таком случае, при выводе будет следующее название: .txt
пробовал и переменные заключать в кавычки и экранировать их и всё не то, либо ошибка, либо лишние символы. Подскажите пожалуйста, как можно сделать?
  • Вопрос задан
  • 3142 просмотра
Решения вопроса 2
@oleg8
я вот так извращался

$tfile="D:\$(get-date -uformat '%Y%m%d')_t.csv"

в переменной D:\20150408_t.csv
Ответ написан
Нужно экранировать символ "_", символом "`", так как в сочтании с "$", он меняет смысл на "$PSItem".
Выглядеть должно так: "$a`_$b`_$c`_log.txt"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Filkri
Пока что решил сделать вот так, надо допилить не в целом пашет =) ну и может что по мелочи докидать, основное делает.

тест


#Объявляем функцию содержащую способ вывода и сорт. по свойству DisplayName.
function Grid-Output

{
param (
<#
Объявляем, что наличие массива элементов указанного ниже для работы
данной функции явлется строго обязательным
#>
[Parameter (Mandatory = $true)]
[Array] $Massive
)

<#
Сортируем вывод по свойству DisplayName, далее указываем формат вывода
GridView
#>
$Massive |sort-object -property DisplayName | Out-GridView
}

<#
Получаем объекты из реестра.

На данном этапе из реестра мы получ. объекты типа:
System.MarshalByRefObject.RegistryKey (Microsoft.Win32.RegistryKey)
Отдельный объект для этих целей был создан потому что:

1.Возможно данный объект, в последующем, необходимо будет изменить.
Скорее всего даже на функцию анализирующую массивы
элементов описанных ниже, формируя единый массив:
1.1: $soft = Get-WmiObject -Class Win32_Product
1.2: $soft32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
1.3: $soft64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

В связи с этим мы изолируем его для упрощения последующих модификаций.

2. Улучшает читабельность кода.
#>
[array]$RegUnistValues = Get-ChildItem HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

<#
Генерируем объекты Automation.PSCustomObject для каждого свойства полученных ранее объектов Win32.RegistryKey
Более подр. информацию по Get-ItemProperty можно почитать тут:
https://technet.microsoft.com/ru-ru/library/hh8498...
#>
[String]$temp = 'Здесь будут временно содержаться значения'
[Array]$temp = $RegUnistValues | ForEach-object {(Get-ItemProperty Microsoft.PowerShell.Core\Registry::$_)}

#вывод полученных данных с помощью ранее написанной функции Grid-Output
Grid-Output -Massive ($temp | Select-Object -Property DisplayName, DIsplayVersion, PSChildName | Export-Csv -Path c:\temp\$env:COMPUTERNAME.csv)



#Обнуляем значение, дабы не оставлять после себя артефактов со значениями реестра.
[String]$RegUnistValues = 'Здесь содержались значения реестра'
[String]$temp = 'Здесь временно содержались значения'


<#
Блокируем автоматическое закрытие окна PowerShell после выполнения скрипта. В данном конкретном случае,
мне необходимо было сделать именно таким образом, однако правильнее будет запустить скрипт с ключом:
powershell.exe -NoExit -command c:\myscript.ps1
Ибо вносить для этого отдельные изменения в сценарий не рекомендуется.
#>
$host.ui.RawUI.ReadKey(6)|out-null

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы