powershell读写磁盘变量(对象序列化)

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

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

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

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

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

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

---【第二章,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)--->传递到远程--->反序列化成对象--->在远程使用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文件。

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

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

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

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

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

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

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

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

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

时间: 2024-08-23 17:39:41

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

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

前面一篇博客的IO被称为经典IO,因为他们大多数都是从Java1.0开始就有了的:然后今天这篇博客是关于NIO的,所以的NIO其实就是JDK从1.4开始,Java提供的一系列改进的输入/输出处理的新功能,这些新功能被统称为新IO(New IO ,简称NIO).另一个概念对象序列化指的是将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列再转换成原来的对象.这样的话我们就可以将对象写入磁盘中,或者是将对象在网络上进行传递.下面就对这两个内容进行总结. 一.J

java对象序列化的理解

1.java中的序列化时transient变量(这个关键字的作用就是告知JAVA我不可以被序列化)和静态变量不会被序列          化(下面是一个测试的例子) (实体带versionUUID,便于反序列化时不会报错.) 2.也是最应该注意的,如果你先序列化对象A后序列化B,那么在反序列化的时候一定记着JAVA规定先读到的对象               是先被序列化的对象,不要先接收对象B,那样会报错.尤其在使用上面的Externalizable的时候一定要注意读取            

深入理解JAVA I/O系列五:对象序列化

序列化 对象序列化的目标是将对象保存到磁盘中,或者允许在网络中直接传输对象.对象序列化机制允许把内存中的JAVA对象转换成跟平台无关的二进制流,从而允许将这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点,其他程序一旦获得了这种二进制流,都可以讲二进制流恢复成原来的JAVA对象. 序列化为何存在 我们知道当虚拟机停止运行之后,内存中的对象就会消失:另外一种情况就是JAVA对象要在网络中传输,如RMI过程中的参数和返回值.这两种情况都必须要将对象转换成字节流,而从用于保存到

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口

对象序列化原因的简单理解

序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,其最终目的都是将内存中的对象持久化或者是在网络上传输.反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 使用序列化的原因 a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本.我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可

Thinking in java 琐碎知识点之 I/O流 、对象序列化

Java I/O流 .对象序列化 1.File类 此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录. File类可以新建.删除和重命名文件和目录,但是File不能访问文件本身的内容,这要使用IO流. File对象的createNewFile()方法在磁盘上创建真实的文件 例程:FileTest.java import java.io.*; public class FileTest { public static void main(String[] args) throws I

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

Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下. 对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络传输,在网络的一

java核心学习(十七) IO框架---对象序列化

一.使用对象流实现序列化. 先定义一个可序列化的对象 package com.shy.IO; import java.io.Serializable; public class Person implements Serializable{ public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } publ

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

序列化是指将对象实例的状态存储到存储媒体的过程,在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转 换为字节流,然后再把字节流写入数据流,在随后对对象进行反序列化时,将创建出与原对象完全相同的副本. 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡.只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行.例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化.以下各部分将探讨 .NET 框架提供的可靠的