---【第一章,开篇引子】---

很久很久以前,我在网上闲逛,看到一头powershell菜鸟,写了一篇感慨道“挖哈哈,我学会powershell啦,我以前很笨,各种不懂,还想把变量保存起来。”

实际上我想说这并不算笨。

大多数变量,是我们需要处理的数据。但凡变量,都是我们需要用到的。都是在内存中的。 数据处理完成之后,99%都不需要了。 但是还有那么1%变量是我们下次还想再用的,这些个变量我们就需要保存起来。 比如游戏数据存盘,软件配置。

powershell 传教士 原创文章 2014-07-23,2015-02-27,2015-06-16,2016-06-23,2016-07-26修改,允许转载,但必须保留名字和出处,否则追究法律责任

ini xml txt 配置 配置文件 配置文档 序列化 反序列化 Import-Clixml Export-Clixml Import-Csv Export-Csv

---【第二章,powershell磁盘变量的用途】---

游戏大家都玩过,有些游戏很难,所以哦存盘文件大家都修改过。

里面存盘文件中,大都没有变量名=屎!

有些是台湾big5码的 =屎!

大都是十六进制的,还有高低位=屎!

在powershell中这一切都不存在了,下面向大家展示的是10进制的,带unicode变量名的,游戏存盘文档读写方法。

用途1:磁盘中的游戏存档

用途2:软件配置等

用途3:用于本机进程之间传值(传的是对象)

用途4:用于远程进程之间传值(传的是对象)

---【第三章,如何写入,读取普通变量】---

$玩家名 = '传脚10'
$金子 = 100
$木头 = 200
$石头 = 300 $save =
@"
`$玩家名 = $玩家名
`$金子 = $金子
`$木头 = $木头
`$石头 = $石头
"@
out-file  a:\y游戏配置.ps1   -inputobject     $save    -Encoding   unicode

读入也很容易,在powershell中 【.   a:\y游戏配置.ps1】即可,其实就是运行脚本。

---【第四章,如何写入,读取【哈希表】、【数组】等对象(即对象序列化)】---

本地powershell对象(或者.net对象)--->序列化成xml(或者json)--->传递文件(或者2进制流)到远程--->反序列化成对象--->在远程使用powershell对象(或者.net对象)

powershell对象(或者.net对象)--->ConvertTo-Json--->json

json--->ConvertFrom-Json--->powershell对象(或者.net对象)

写入:

$玩家 = @{ "红" = 100; "蓝" = 200 }
$玩家 | Export-Clixml -LiteralPath a:\y游戏配置.xml

读取:

$玩家 = import-Clixml -LiteralPath a:\y游戏配置.xml
$玩家

注意:每个对象对应一个xml文件。

---【第五章,表的序列化】---

行列整齐数据(表),的(反)序列化就用 Import-Csv Export-Csv 。

其中Import-Csv倒入后是一个数组。数组的每个元素,都有n个属性,对应csv的列名。

其中Export-Csv可以用-Append追加。-NoTypeInformation去掉表头。

---【第六章,还可以写入什么?】---

脚本中不但可以写入变量,用于数据存储。还可以写入代码,函数,命令对吧

---【第七章,补充一点,powershell读写变量,基本也不需要环境变量。】---

环境变量的本质是注册表。 环境变量的值,只能存放4095个英文字符。

环境变量随时可以写。写入的内容,只有在新建立cmd,powershell进程那一刻,才去读。

如某脚本每秒写入环境变量值。比如这一刻,变量值a=55。这时新建powershell进程,可以读到a=55。 但下一秒a=56了,但这个新建powershell进程中,环境变量并不更新。

结论,多进程计算中,用环境变量来交换公用数据,即读写环境变量,还不如直接读写注册表,并不比读写文件快,也不比读写文件方便。

---【第八章,结论】---

我们玩powershell的人,需要游戏存档,需要绿色软件,需要软件配置文件,但基本不需要读写注册表,基本不需要环境变量,基本不需要读写*.txt,*.ini,只需要*.ps1111111  ! 而且既然是ps1了,配置文档,就不光是文档了,还可以有段落,有函数,有命令。

powershell读写磁盘变量(对象序列化)的更多相关文章

  1. Java开发笔记(九十)对象序列化及其读写

    有些时候,开发者想把程序运行过程中的数据临时保存到文件,可是前面介绍的字符流和字节流,要么用来读写文本字符串,要么用来读写字节数组,并不能直接保存某个对象信息,因为对象里面包括成员属性和成员方法,单就 ...

  2. Java程序设计——对象序列化

    对象序列化的目标是将对象保存到磁盘中或允许在网络中直接传输对象,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,通过网络将这种二进制流传输到另 ...

  3. java对象序列化的理解

    1.java中的序列化时transient变量(这个关键字的作用就是告知JAVA我不可以被序列化)和静态变量不会被序列          化(下面是一个测试的例子) (实体带versionUUID,便 ...

  4. Tinking in Java ---Java的NIO和对象序列化

    前面一篇博客的IO被称为经典IO,因为他们大多数都是从Java1.0开始就有了的:然后今天这篇博客是关于NIO的,所以的NIO其实就是JDK从1.4开始,Java提供的一系列改进的输入/输出处理的新功 ...

  5. java 输入输出 对象序列化implements Serializable与反序列化:ObjectOutputStream.writeObject() ;objectInputStream.readObject() ;serialVersionUID字段注意

    对象序列化 对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象.对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将 ...

  6. C#[Serializable]在C#中的作用-NET 中的对象序列化

    为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本:按值将对象从一个应用程序域发送至另一个应用程序域.例如,序列化可用于在 ASP.NET 中保 ...

  7. java 对象序列化

    java 对象序列化 package org.rui.io.serializable; import java.io.ByteArrayInputStream; import java.io.Byte ...

  8. Serializable在C#中的作用.net中的对象序列化 (转)

    序列化是指将对象实例的状态存储到存储媒体的过程,在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转 换为字节流,然后再把字节流写入数据流,在随后对对象进行反序列化时,将创建出 ...

  9. Java对象序列化/反序列化的注意事项(转)

    Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...

随机推荐

  1. java.lang.InstantiationException-反射机制

    package com.test.classtest; public class test { public static void main(String[] args) throws Except ...

  2. 复利计算器(4)——jQuery界面美化、自动补全

    一.分工 这次终于可以跟小伙伴合作了,经过讨论,我负责界面的美化和输入框自动补全,小伙伴擅长安卓,于是将复利计算器弄成app的任务就交给了小伙伴.为了我们两人团队,我们都好奋斗哈哈哈!! 二.界面美化 ...

  3. AngulerJS小知识点二

    AngularJS与其他JavaScript框架最主要的区别在于,控制器并不合适用来执行DOM操作.格式化或数据操作,以及除存储数据模型以外的状态维护操作.他只是视图和$scope之间的桥梁. 过滤器 ...

  4. Lambda表达式入门

    Lambda表达式是Java 8的重要更新,也是一个被广大开发者期待已久的新特性,Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接 ...

  5. 基于Eclipse+Cordova的Android Hybrid应用开发环境搭建

    环境说明 操作系统:Windows 7 64位 Eclipse版本:4.5.2 Release(eclipse-jee-mars-2) JDK版本:1.8 搭建步骤 1.从http://www.ecl ...

  6. iOS开发 滤镜的使用

    iOS开发之滤镜的使用技巧(CoreImage)   一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住com ...

  7. C# for循环 循环中先求长度还是使用list.Count,哪个效率高

    这种问法可能问的不好.应该说成是第一种方法完全没有必要,很多人可能以为那样会为代码带来效率,而实际上是不会给效率带来任何提升. 因为事实上,索引器内部,为了安全期间,还是会去求整个list的count ...

  8. Python文件使用“wb”方式打开,写入内容

    Python文件使用"wb"方式打开,写入字符串会报错,因为这种打开方式为:以二进制格式打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. 所以写入 ...

  9. Vue刨坑

    vue常见问题 1.在自定义组件里,你可以像任何普通元素一样用v-for.eg1: <my-component v-for="item in items"></m ...

  10. 机器学习实战knn

    最近在学习这本书,按照书上的实例编写了knn.py的文件,使用canopy进行编辑,用shell交互时发现运行时报错: >>> kNN.classify0([0,0],group,l ...